<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Patrick+Germain</id>
	<title>FSDeveloper Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Patrick+Germain"/>
	<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php/Special:Contributions/Patrick_Germain"/>
	<updated>2026-04-27T22:12:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=FS20_BGL_File_Format&amp;diff=10977</id>
		<title>FS20 BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=FS20_BGL_File_Format&amp;diff=10977"/>
		<updated>2021-06-30T20:22:05Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* FSProcedureChildType */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox-Applicable-FSVersion&lt;br /&gt;
| MSFS = true&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a terse reference for the FS20 (MSFS) BGL file format. &lt;br /&gt;
&lt;br /&gt;
Much of the original [[BGL File Format|BGL File Format]] information still applies in terms of BGL format and a number of the mathematical transformations used to decode certain data types. &lt;br /&gt;
&lt;br /&gt;
This page should be used in conjunction with that page for a more full understanding of the FS20 BGL format, in particular everything in [[BGL_File_Format#BGL_Common_Format|BGL Common Format]] still holds.&lt;br /&gt;
&lt;br /&gt;
Note that BGL section IDs are encoded in [[#FSSectType|FSSectType]], which are largely identical to FSX with a couple of additions.&lt;br /&gt;
&lt;br /&gt;
= Airport =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0056&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| comCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| startCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| appCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legacyApronCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| helipadCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| towerLon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| towerLat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| towerAlt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| Services&lt;br /&gt;
| fuelService&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| trafficScalar&lt;br /&gt;
| Used as a float - ratio of the byte value over 255&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| starAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| isOnTIN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| closed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| departureCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| onlyAddIfReplace&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| arrivalCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| applyFlatten&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| apronCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedLineCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedPolygonCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedHatchedAreaCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records, which appear immediately afterwards: &lt;br /&gt;
&lt;br /&gt;
* [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* [[#Airport.Tower|Airport.Tower]]&lt;br /&gt;
* [[#Airport.Com|Airport.Com]]&lt;br /&gt;
* [[#Airport.GroundMergingTransfer|Airport.GroundMergingTransfer]]&lt;br /&gt;
* [[#Airport.Runway|Airport.Runway]]&lt;br /&gt;
* [[#Airport.Start|Airport.Start]]&lt;br /&gt;
* [[#Airport.TaxiwayPointContainer|Airport.TaxiwayPointContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayParkingContainer|Airport.TaxiwayParkingContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayPathContainer|Airport.TaxiwayPathContainer]]&lt;br /&gt;
* [[#Airport.TaxiNameContainer|Airport.TaxiNameContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayParkingMfgrName|Airport.TaxiwayParkingMfgrName]]&lt;br /&gt;
* [[#Airport.Apron|Airport.Apron]]&lt;br /&gt;
* [[#Airport.TaxiwaySign|Airport.TaxiwaySign]]&lt;br /&gt;
* [[#Airport.PaintedLine|Airport.PaintedLine]]&lt;br /&gt;
* [[#Airport.PaintedHatchedArea|Airport.PaintedHatchedArea]]&lt;br /&gt;
* [[#Airport.Jetway|Airport.Jetway]]&lt;br /&gt;
* [[#Airport.LightSupport|Airport.LightSupport]]&lt;br /&gt;
* [[#Airport.Approach|Airport.Approach]]&lt;br /&gt;
* [[#Airport.Arrival|Airport.Arrival]]&lt;br /&gt;
* [[#Airport.Departure|Airport.Departure]]&lt;br /&gt;
* [[#Airport.ApronEdgeLights|Airport.ApronEdgeLights]]&lt;br /&gt;
* [[#Airport.BlastFence|Airport.BlastFence]]&lt;br /&gt;
* [[#Airport.BoundaryFence|Airport.BoundaryFence]]&lt;br /&gt;
* [[#Airport.Helipad|Airport.Helipad]]&lt;br /&gt;
* [[#Airport.ProjectedMesh|Airport.ProjectedMesh]]&lt;br /&gt;
* [[#Airport.DeleteAirport|Airport.DeleteAirport]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Name ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0019&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| recSz - 6&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.GroundMergingTransfer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e9&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| groundMergingTransfertBright&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| groundMergingTransfertDark&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Approach ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0024&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| char&lt;br /&gt;
| suffix&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runway&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ApproachType|ApproachType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 4 to 6&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| gpsOverlay&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| missedApproachLegCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| missedAltitude&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records, which appear immediately afterwards: &lt;br /&gt;
&lt;br /&gt;
* Airport.Approach.ApproachLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.Approach.MissedApproachLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.Approach.Transition as [[#Airport.TransitionContainer| Airport.TransitionContainer]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Apron ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d3&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawSurface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawDetail&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| localUV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| stretchUV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationInside&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| opacity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tiling&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| in radians&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| int&lt;br /&gt;
| priority&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| triangleCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: triangleCt x triangles:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex3&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.ApronEdgeLights ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0031&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| edgeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: edgeCt x edges:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Arrival: see [[#Airport.FsProcedure|Airport.FsProcedure]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.BlastFence: see [[#Airport.VectorPlacement|Airport.VectorPlacement]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.BoundaryFence: see [[#Airport.VectorPlacement|Airport.VectorPlacement]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.Com ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0012&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ComType|ComType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyMHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| recSz - 0xc&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.DeleteAirport ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0033&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allApproaches&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allApronLights&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allAprons&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allFrequencies&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allHelipads&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allRunways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allStarts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allTaxiways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allBlastFences&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allBoundaryFences&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 10 to 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allJetways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allControlTowers&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| startCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| freqCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allDepartures&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allArrivals&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allPaintedElements&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allLightSupports&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTaxiwaySigns&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allILSs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTerminalWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTerminalNDBs&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: followed potentially by individual runways / starts / frequencies, but no examples of that yet&lt;br /&gt;
&lt;br /&gt;
== Airport.Departure: see [[#Airport.FsProcedure|Airport.FsProcedure]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.FsProcedure ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) as per particular procedure type&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayTransitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| commonRouteLegCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| enrouteTransitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Airport.FsProcedure.CommonRouteLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.FsProcedure.RunwayTransitions as [[#Airport.TransitionContainer|Airport.TransitionContainer]]&lt;br /&gt;
* Airport.FsProcedure.EnrouteTransitions as [[#Airport.TransitionContainer|Airport.TransitionContainer]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Helipad ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0026&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| surface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Helipad|Helipad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| transparent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| closed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| color&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Jetway ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00de&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| parkingNumber&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| gateName&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| suffix&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| scenObjLen1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| scenObjLen2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: up to 2 [[#SceneryObject|SceneryObject]]s (dependant on if respective scenObjLen is nonzero)&lt;br /&gt;
&lt;br /&gt;
== Airport.LegContainer.Leg ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#LegType|LegType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| altitudeDescriptor&lt;br /&gt;
| ([[#AltitudeDescriptor|AltitudeDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 0 to 1&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| turnDirection&lt;br /&gt;
| ([[#TurnDirection|TurnDirection]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| courseIsTrue&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| timeIsSpecified&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 10&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| flyOver&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| recommendedType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| theta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| rho&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF courseIsTrue&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| trueCourse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magneticCourse&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF timeIsSpecified&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| time&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE     &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| distance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| speedLimit&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| verticalAngle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 16&lt;br /&gt;
| bytes&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.LegContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| 0x00e1 for ApproachLegs&amp;lt;br/&amp;gt;0x00e2 for MissedApproachLegs&amp;lt;br/&amp;gt;0x00e3 for TransitionLegs&amp;lt;br/&amp;gt;0x00e4 for RunwayTransitionLegs&amp;lt;br/&amp;gt;0x00e5 for CommonRouteLegs&amp;lt;br/&amp;gt;0x00e6 for EnrouteTransitionLegs&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: legCt x [[#Airport.LegContainer.Leg|Airport.LegContainer.Leg]]&lt;br /&gt;
&lt;br /&gt;
== Airport.LightSupport ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0057&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| latitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| longitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| altitude2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.PaintedHatchedArea ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d8&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| type&lt;br /&gt;
| ([[#PaintedLineType|PaintedLineType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.PaintedLine ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00cf&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#PaintedLineType|PaintedLineType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| trueAngle&lt;br /&gt;
| ([[#PaintedLineTrueAngle|PaintedLineTrueAngle]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
== Airport.PaintedPolygon ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| color&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.ProjectedMesh ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e8&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| priority&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 0&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 1 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: a [[#SceneryObject|SceneryObject]] used as the source of the projected mesh&lt;br /&gt;
&lt;br /&gt;
== Airport.Runway ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00ce&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| transparent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| primaryNumber&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| primaryDesignator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| secondaryNumber&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| secondaryDesignator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| primaryILSIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| secondaryILSIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| patternAltitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsEdges&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsThreshold&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsFixedDistance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsTouchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsDashes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrecision&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsEdgePavement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSingleEnd&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrimaryClosed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 10&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSecondaryClosed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrimaryStol&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 12&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSecondaryStol&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 13&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateThreshold&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 14&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateFixedDistance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 15&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateTouchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternatePrecision&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsLeadingZeroIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsNoThresholdEndArrows&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bits 0 to 1&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| lightsEdge&lt;br /&gt;
| ([[#Lights|Lights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bits 2 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| lightsCenter&lt;br /&gt;
| ([[#Lights|Lights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| lightsCenterRed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| primaryTakeOff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| primaryLanding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| primaryPattern&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| secondaryTakeOff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| secondaryLanding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| secondaryPattern&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x14&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x5c&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* [[#Airport.Runway.VASI|Airport.Runway.VASI]]&lt;br /&gt;
* [[#Airport.Runway.OffsetThreshold|Airport.Runway.OffsetThreshold]]&lt;br /&gt;
* [[#Airport.Runway.BlastPad|Airport.Runway.BlastPad]]&lt;br /&gt;
* [[#Airport.Runway.Overrun|Airport.Runway.Overrun]]&lt;br /&gt;
* [[#Airport.Runway.ApproachLights|Airport.Runway.ApproachLights]]&lt;br /&gt;
* [[#Airport.Runway.FacilityMaterial|Airport.Runway.FacilityMaterial]]&lt;br /&gt;
* [[#Airport.Runway.RunwayDeformation|Airport.Runway.RunwayDeformation]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.ApproachLights ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x00df for Primary, 0x00e0 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 0 to 4&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| system&lt;br /&gt;
| ([[#ApproachLights|ApproachLights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| endLights&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| reil&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| touchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| strobes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| offset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| slope&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.BlastPad ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0007 for Primary, 0x0008 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.FacilityMaterial ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x00cb&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| opacity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| guid&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tilingU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tilingV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.OffsetThreshold ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0005 for Primary, 0x0006 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.Overrun ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0065 for Primary, 0x0066 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.RunwayDeformation ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x003e&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| ratio&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| controlPointBefore&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| controlPointAfter&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.VASI ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]])&amp;lt;br/&amp;gt;0x000b for Primary Left, 0x000c for Primary Right&amp;lt;br/&amp;gt;0x000d for Secondary Left, 0x000e for Secondary Right&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Vasi|Vasi]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| biasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| biasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Start ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0011&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 4 to 7&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Start|Start]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiNameContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x001d&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiNameContainer.TaxiName|Airport.TaxiNameContainer.TaxiName]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiNameContainer.TaxiName ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayParkingContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e7&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayParkingContainer.TaxiwayParking|Airport.TaxiwayParkingContainer.TaxiwayParking]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayParkingContainer.TaxiwayParking ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 5&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| name&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 6 to 7&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| pushBack&lt;br /&gt;
| ([[#ParkingPushback|ParkingPushback]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 8 to 11&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ParkingType|ParkingType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 12 to 23&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| number&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 24 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| airlineCodeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: airlineCodeCt x airlineCodes (fixed 4 char strings)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| string&lt;br /&gt;
| airlineCode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, at unknown position pos after that:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| numberMarking&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| suffix&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2&lt;br /&gt;
| 0x5&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| numberBiasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| numberBiasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| numberHeading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayPathContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d4&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayPathContainer.TaxiwayPath|Airport.TaxiwayPathContainer.TaxiwayPath]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayPathContainer.TaxiwayPath ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| start&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 0 to 11&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| legacyEnd&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 12 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#TaxiwayPathType|TaxiwayPathType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| enhanced&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawSurface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawDetail&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF type is RUNWAY&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| centerLine&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| centerLineLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 2 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| leftEdge&lt;br /&gt;
| ([[#TaxiwayEdgeType|TaxiwayEdgeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| leftEdgeLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 5 to 6&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| rightEdge&lt;br /&gt;
| ([[#TaxiwayEdgeType|TaxiwayEdgeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| rightEdgeLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| weightLimit&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationInside&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| end&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayPointContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x001a&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayPointContainer.TaxiwayPoint|Airport.TaxiwayPointContainer.TaxiwayPoint]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayPointContainer.TaxiwayPoint ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#TaxiPointType|TaxiPointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| orientation&lt;br /&gt;
| ([[#TaxiPointOrientation|TaxiPointOrientation]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwaySign ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d9&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| aptTaxiwaySignCt&lt;br /&gt;
| unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| size&lt;br /&gt;
| ([[#SignSize|SignSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| justification&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x3e&lt;br /&gt;
| string&lt;br /&gt;
| label&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Tower ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0066&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| defaultTower&lt;br /&gt;
|             &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 1 to 2&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| overrideSize&lt;br /&gt;
| ([[#OverrideTowerSize|OverrideTowerSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| overrideLevel&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF defaultTower&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|- &lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| A [[#SceneryObject|SceneryObject]] is embedded at 0xa&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TransitionContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSProcedureChildType|FSProcedureChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF childType == RunwayTransitions&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 3&lt;br /&gt;
| byte[]&lt;br /&gt;
| unk&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: transitionCt x [[#Airport.TransitionContainer.Transition|Airport.TransitionContainer.Transition]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TransitionContainer.Transition ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionType&lt;br /&gt;
| ([[#TransitionType|TransitionType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF transitionType == DME&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| int&lt;br /&gt;
| radial&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| distance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: legCt x [[#Airport.Leg|Airport.Leg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.VectorPlacement ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| profile&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Boundary =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0020&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#BoundaryType|BoundaryType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| maximumAltitudeType&lt;br /&gt;
| ([[#AltitudeType|AltitudeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 4 to 7&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| minimumAltitudeType&lt;br /&gt;
| ([[#AltitudeType|AltitudeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lonMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| altitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lonMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| altitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Boundary.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Boundary.Com as [[#Airport.Com|Airport.Com]]&lt;br /&gt;
&lt;br /&gt;
== Boundary.Name: see [[#Airport.Name|Airport.Name]] ==&lt;br /&gt;
&lt;br /&gt;
== Boundary.Com: see [[#Airport.Com|Airport.Com]] ==&lt;br /&gt;
&lt;br /&gt;
== Boundary.BoundaryDefContainer ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSBoundaryChildType|FSBoundaryChildType]]) 0x0021&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Boundary.BoundaryDefContainer.BoundaryDef|Boundary.BoundaryDefContainer.BoundaryDef]]&lt;br /&gt;
&lt;br /&gt;
=== Boundary.BoundaryDefContainer.BoundaryDef ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| boundaryDefType&lt;br /&gt;
| ([[#FSBoundaryDefType|FSBoundaryDefType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| index&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then based on the type, choose a subtype:&lt;br /&gt;
&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Com|BoundaryDefContainer.BoundaryDef.Com]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Origin|BoundaryDefContainer.BoundaryDef.Origin]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Circle|BoundaryDefContainer.BoundaryDef.Circle]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Line|BoundaryDefContainer.BoundaryDef.Line]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Arc|BoundaryDefContainer.BoundaryDef.Arc]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Start|BoundaryDefContainer.BoundaryDef.Start]]&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Com: unknown ====&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Origin ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Circle ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Line ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Arc ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Start ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DeleteAirportNavigation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00db&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeleteNavigation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00da&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllVORs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllNDBs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllTerminalWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllTerminalNDBs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllILSs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllApproaches&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllDepartures&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllArrivals&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllFrequencies&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ExclusionRectangle =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 3&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeAllObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 4&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeBeaconObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 5&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeEffectObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 6&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeGenericBuildingObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 7&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeLibraryObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 8&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeTaxiwaySignObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 9&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeTriggerObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 10&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeWindsockObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 11&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeExtrusionBridgeObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 12&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeSimObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 13&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeWorldScripts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 14&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeCarParking&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 15&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeRectangles&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 16&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludePolygons&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| longitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| longitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAirportSummary =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0032&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 5 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| approachAvailability&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| longRwyLength&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| longRwyHeading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| Services&lt;br /&gt;
| fuelService&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsIndexMember =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| rectype&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 5 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airport[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidV&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsNameList =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0027&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| always zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| regionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| countryCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| stateCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| cityCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| airportCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| identCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| regionOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| countryOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| stateOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| cityOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| airportOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| identOffset&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: identCt x following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| region&lt;br /&gt;
| regionNames[regionIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| country&lt;br /&gt;
| countryNames[countryIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2 bits 4 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| state&lt;br /&gt;
| stateNames[stateIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| city&lt;br /&gt;
| cityNames[cityIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| airport&lt;br /&gt;
| airportNames[airportIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| icao&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| regionCode?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x12&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LandmarkLocation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00ea&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| nameLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| typeLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| ownerLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| nameLen&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 + nameLen&lt;br /&gt;
| typeLen&lt;br /&gt;
| string&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 + nameLen + typeLen&lt;br /&gt;
| ownerLen&lt;br /&gt;
| string&lt;br /&gt;
| owner&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Marker =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0018&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#MarkerType|MarkerType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Ndb =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0017&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#NdbType|NdbType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyKHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards:&lt;br /&gt;
* Ndb.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
&lt;br /&gt;
= Route =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| routeType&lt;br /&gt;
| ([[#RouteType|RouteType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: next (offset 0x9) and previous (offset 0x15) route elements as [[#Route.PreviousNext|Route.PreviousNext]]&lt;br /&gt;
&lt;br /&gt;
== Route.PreviousNext ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 2&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| waypointType&lt;br /&gt;
| ([[#RouteWaypointType|RouteWaypointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 5 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SceneryObject =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0025&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| altitudeIsAgl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noAutogenSuppression&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noCrash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noFog&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noShadow&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noZWrite&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noZTest&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| hideOnTIN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| pitch&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Pitch calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| bank&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Bank calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| imageComplexity&lt;br /&gt;
| ([[#Complexity|Complexity]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This record has multiple sub-types:&lt;br /&gt;
* [[#SceneryObject.LibraryObject|SceneryObject.LibraryObject]]&lt;br /&gt;
* [[#SceneryObject.Windsock|SceneryObject.Windsock]]&lt;br /&gt;
* [[#SceneryObject.WorldScript|SceneryObject.WorldScript]]&lt;br /&gt;
* [[#SceneryObject.SimObject|SceneryObject.SimObject]]&lt;br /&gt;
* [[#SceneryObject.CarParking|SceneryObject.CarParking]]&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* [[#SceneryObject.AttachedObject|SceneryObject.AttachedObject]]&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.LibraryObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.Windsock ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| poleHeight&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| sockLength&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| poleColor&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| sockColor&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| lighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| string&lt;br /&gt;
| containerTitle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + containerTitleLen + 1&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| string&lt;br /&gt;
| containerPath&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.WorldScript ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| objectFileLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| objectFileLen&lt;br /&gt;
| string&lt;br /&gt;
| objectFile&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.SimObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| string&lt;br /&gt;
| containerTitle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34 + containerTitleLen + 1&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| string&lt;br /&gt;
| containerPath&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.CarParking ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.AttachedObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| beginRecTypeRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| beginRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subType&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| attachpointNameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| pitch&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Pitch calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| bank&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Bank calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasY&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| probability&lt;br /&gt;
| Ratio over 0x10000&lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| randomness&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset&lt;br /&gt;
| *** unknown ***&lt;br /&gt;
| string&lt;br /&gt;
| attachpointName&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset + unknown&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| endRecTypeRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset + unknown + 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| endRecSz&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards:&lt;br /&gt;
* [[#SceneryObject.Beacon|SceneryObject.Beacon]]&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.Beacon ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| thisBeaconType.type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| baseType&lt;br /&gt;
| thisBeaconType.baseType&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VorIls =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x13&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| vorType&lt;br /&gt;
| ([[#VorType|VorType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyMHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, if the type is ILS:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| backCourse&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Ils.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Ils.Dme as [[#VorIls.Dme|VorIls.Dme]]&lt;br /&gt;
* [[#Ils.GlideSlope|Ils.GlideSlope]]&lt;br /&gt;
* [[#Ils.Localizer|Ils.Localizer]]&lt;br /&gt;
&lt;br /&gt;
Otherwise, if the type is VOR:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#VorType|VorType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| dmeOnly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| dme&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| nav&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Vor.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Vor.Dme as [[#VorIls.Dme|VorIls.Dme]]&lt;br /&gt;
    &lt;br /&gt;
== Ils.Localizer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VorIls.Dme ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ils.GlideSlope ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Waypoint =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x22&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| waypointType&lt;br /&gt;
| ([[#WaypointType|WaypointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| routeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointAirport&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: routeCt x [[#Route|Route]]&lt;br /&gt;
&lt;br /&gt;
= Enumerated Types =&lt;br /&gt;
&lt;br /&gt;
Naming convention: &lt;br /&gt;
&lt;br /&gt;
* Names beginning with &amp;quot;FS&amp;quot; are enumerated types which are not defined within the bglcomp.xsd format.&lt;br /&gt;
* All other names correspond with bglcomp.xsd.&lt;br /&gt;
&lt;br /&gt;
== AltitudeDescriptor ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| EMPTY&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| C&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| I&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| J&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| V&lt;br /&gt;
| 0xa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AltitudeType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MEAN_SEA_LEVEL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| ABOVE_GROUND_LEVEL&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| UNLIMITED&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ApproachLights ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| ODALS&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MALSF&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| MALSR&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| SSALF&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| SSALR&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| ALSF1&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ALSF2&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| RAIL&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| CALVERT&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| CALVERT2&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| MALS&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| SALS&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| SALSF&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| SSALS&lt;br /&gt;
| 0xe&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ApproachType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| GPS&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| SDF&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| LDA&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| VORDME&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| NDBDME&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| RNAV&lt;br /&gt;
| 0xA&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER_BACKCOURSE&lt;br /&gt;
| 0xB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArcDirection ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| CLOCKWISE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| COUNTER_CLOCKWISE&lt;br /&gt;
| 0x2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== BoundaryType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_A&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_B&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_C&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_D&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_E&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_F&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_G&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| TOWER&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| GROUND&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| DEPARTURE&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| APPROACH&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| MOA&lt;br /&gt;
| 0xe&lt;br /&gt;
|-&lt;br /&gt;
| RESTRICTED&lt;br /&gt;
| 0xf&lt;br /&gt;
|-&lt;br /&gt;
| PROHIBITED&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| WARNING&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| ALERT&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| DANGER&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| NATIONAL_PARK&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| MODEC&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| RADAR&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| TRAINING&lt;br /&gt;
| 0x17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Complexity ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VERY_SPARSE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SPARSE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| NORMAL&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| DENSE&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VERY_DENSE&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| EXTREMELY_DENSE&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ComType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| ATIS&lt;br /&gt;
| 0x0001&lt;br /&gt;
|-&lt;br /&gt;
| MULTICOM&lt;br /&gt;
| 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| UNICOM&lt;br /&gt;
| 0x0003&lt;br /&gt;
|-&lt;br /&gt;
| CTAF&lt;br /&gt;
| 0x0004&lt;br /&gt;
|-&lt;br /&gt;
| GROUND&lt;br /&gt;
| 0x0005&lt;br /&gt;
|-&lt;br /&gt;
| TOWER&lt;br /&gt;
| 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| APPROACH&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| DEPARTURE&lt;br /&gt;
| 0x0009&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x000A&lt;br /&gt;
|-&lt;br /&gt;
| FSS&lt;br /&gt;
| 0x000B&lt;br /&gt;
|-&lt;br /&gt;
| AWOS&lt;br /&gt;
| 0x000C&lt;br /&gt;
|-&lt;br /&gt;
| ASOS&lt;br /&gt;
| 0x000D&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE_PRE_TAXI&lt;br /&gt;
| 0x000E&lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
| 0x000F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designator ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 0x06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== End ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| PRIMARY&lt;br /&gt;
|-&lt;br /&gt;
| SECONDARY&lt;br /&gt;
|-&lt;br /&gt;
| BASE&lt;br /&gt;
|-&lt;br /&gt;
| RECIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FixType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| AIRPORT&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL_NDB&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| WAYPOINT&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL_WAYPOINT&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSAirportChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| 0x0011&lt;br /&gt;
|-&lt;br /&gt;
| Com&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayPoint&lt;br /&gt;
| 0x001a&lt;br /&gt;
|-&lt;br /&gt;
| TaxiName&lt;br /&gt;
| 0x001d&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x0022&lt;br /&gt;
|-&lt;br /&gt;
| Approach&lt;br /&gt;
| 0x0024&lt;br /&gt;
|-&lt;br /&gt;
| Helipad&lt;br /&gt;
| 0x0026&lt;br /&gt;
|-&lt;br /&gt;
| ApronEdgeLights&lt;br /&gt;
| 0x0031&lt;br /&gt;
|-&lt;br /&gt;
| DeleteAirport&lt;br /&gt;
| 0x0033&lt;br /&gt;
|-&lt;br /&gt;
| BlastFence&lt;br /&gt;
| 0x0038&lt;br /&gt;
|-&lt;br /&gt;
| BoundaryFence&lt;br /&gt;
| 0x0039&lt;br /&gt;
|-&lt;br /&gt;
| Departure&lt;br /&gt;
| 0x0042&lt;br /&gt;
|-&lt;br /&gt;
| Arrival&lt;br /&gt;
| 0x0048&lt;br /&gt;
|-&lt;br /&gt;
| LightSupport&lt;br /&gt;
| 0x0057&lt;br /&gt;
|-&lt;br /&gt;
| Tower&lt;br /&gt;
| 0x0066&lt;br /&gt;
|-&lt;br /&gt;
| Runway&lt;br /&gt;
| 0x00ce&lt;br /&gt;
|-&lt;br /&gt;
| PaintedLine&lt;br /&gt;
| 0x00cf&lt;br /&gt;
|-&lt;br /&gt;
| Apron&lt;br /&gt;
| 0x00d3&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayPath&lt;br /&gt;
| 0x00d4&lt;br /&gt;
|-&lt;br /&gt;
| PaintedHatchedArea&lt;br /&gt;
| 0x00d8&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x00d9&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayParkingMfgrName&lt;br /&gt;
| 0x00dd&lt;br /&gt;
|-&lt;br /&gt;
| Jetway&lt;br /&gt;
| 0x00de&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayParking&lt;br /&gt;
| 0x00e7&lt;br /&gt;
|-&lt;br /&gt;
| ProjectedMesh&lt;br /&gt;
| 0x00e8&lt;br /&gt;
|-&lt;br /&gt;
| GroundMergingTransfer&lt;br /&gt;
| 0x00e9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSAttachedObjectType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Beacon&lt;br /&gt;
| 0x11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSBoundaryChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Com&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| BoundaryDef&lt;br /&gt;
| 0x0021&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSBoundaryDefType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| START&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| LINE&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| ORIGIN&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ARC_CW&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| ARC_CCW&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CIRCLE&lt;br /&gt;
| 0x6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSDataType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Undefined&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Airport&lt;br /&gt;
| 0x56&lt;br /&gt;
|-&lt;br /&gt;
| GenericBuilding&lt;br /&gt;
| 0x0A&lt;br /&gt;
|-&lt;br /&gt;
| LibraryObject&lt;br /&gt;
| 0x0B&lt;br /&gt;
|-&lt;br /&gt;
| Windsock&lt;br /&gt;
| 0x0C&lt;br /&gt;
|-&lt;br /&gt;
| Effect&lt;br /&gt;
| 0x0D&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x0E&lt;br /&gt;
|-&lt;br /&gt;
| Trigger&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| ExtrusionBridge&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| VorIls&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| WorldScript&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| CarParking&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| Ndb&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| Marker&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| SimObject&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| Boundary&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| Geopol&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NameList&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| Vor[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| Ndb[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| ModelData&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x2c&lt;br /&gt;
|-&lt;br /&gt;
| ExclusionRectangle&lt;br /&gt;
| 0x2e&lt;br /&gt;
|-&lt;br /&gt;
| TimeZone&lt;br /&gt;
| 0x2f&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x32&lt;br /&gt;
|-&lt;br /&gt;
| CVX&lt;br /&gt;
| 0x65&lt;br /&gt;
|-&lt;br /&gt;
| DEM&lt;br /&gt;
| 0x67&lt;br /&gt;
|-&lt;br /&gt;
| Landclass&lt;br /&gt;
| 0x68&lt;br /&gt;
|-&lt;br /&gt;
| Waterclass&lt;br /&gt;
| 0x69&lt;br /&gt;
|-&lt;br /&gt;
| Regions&lt;br /&gt;
| 0x6a&lt;br /&gt;
|-&lt;br /&gt;
| Population&lt;br /&gt;
| 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| LCLookup&lt;br /&gt;
| 0x6f&lt;br /&gt;
|-&lt;br /&gt;
| Seasons&lt;br /&gt;
| 0x78&lt;br /&gt;
|-&lt;br /&gt;
| DeleteNavigation&lt;br /&gt;
| 0xDA&lt;br /&gt;
|-&lt;br /&gt;
| DeleteAirportNavigation&lt;br /&gt;
| 0xDB&lt;br /&gt;
|-&lt;br /&gt;
| LandmarkLocation&lt;br /&gt;
| 0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSProcedureChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Transition&lt;br /&gt;
| 0x002c&lt;br /&gt;
|-&lt;br /&gt;
| RunwayTransitions&lt;br /&gt;
| 0x0046&lt;br /&gt;
|-&lt;br /&gt;
| EnrouteTransitions&lt;br /&gt;
| 0x0047&lt;br /&gt;
|-&lt;br /&gt;
| EnrouteTransitions (new)&lt;br /&gt;
| 0x004a&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLegs&lt;br /&gt;
| 0x00e1&lt;br /&gt;
|-&lt;br /&gt;
| MissedApproachLegs&lt;br /&gt;
| 0x00e2&lt;br /&gt;
|-&lt;br /&gt;
| TransitionLegs&lt;br /&gt;
| 0x00e3&lt;br /&gt;
|-&lt;br /&gt;
| RunwayTransitionLegs&lt;br /&gt;
| 0x00e4&lt;br /&gt;
|-&lt;br /&gt;
| CommonRouteLegs&lt;br /&gt;
| 0x00e5&lt;br /&gt;
|-&lt;br /&gt;
| EnrouteTransitionLegs&lt;br /&gt;
| 0x00e6&lt;br /&gt;
|-&lt;br /&gt;
| CommonRouteLegs (new)&lt;br /&gt;
| 0x00f0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSRunwayChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| OffsetThresholdPri&lt;br /&gt;
| 0x0005&lt;br /&gt;
|-&lt;br /&gt;
| OffsetThresholdSec&lt;br /&gt;
| 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| BlastPadPri&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| BlastPadSec&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| VASIPriL&lt;br /&gt;
| 0x000b&lt;br /&gt;
|-&lt;br /&gt;
| VASIPriR&lt;br /&gt;
| 0x000c&lt;br /&gt;
|-&lt;br /&gt;
| VASISecL&lt;br /&gt;
| 0x000d&lt;br /&gt;
|-&lt;br /&gt;
| VASISecR&lt;br /&gt;
| 0x000e&lt;br /&gt;
|-&lt;br /&gt;
| RunwayDeformation&lt;br /&gt;
| 0x003e&lt;br /&gt;
|-&lt;br /&gt;
| OverrunPri&lt;br /&gt;
| 0x0065&lt;br /&gt;
|-&lt;br /&gt;
| OverrunSec&lt;br /&gt;
| 0x0066&lt;br /&gt;
|-&lt;br /&gt;
| FacilityMaterial&lt;br /&gt;
| 0x00cb&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLightsPri&lt;br /&gt;
| 0x00df&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLightsSec&lt;br /&gt;
| 0x00e0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSSceneryChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| GenericBuilding&lt;br /&gt;
| 0x000A&lt;br /&gt;
|-&lt;br /&gt;
| LibraryObject&lt;br /&gt;
| 0x000B&lt;br /&gt;
|-&lt;br /&gt;
| Effect&lt;br /&gt;
| 0x000D&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x000E&lt;br /&gt;
|-&lt;br /&gt;
| Trigger&lt;br /&gt;
| 0x0010&lt;br /&gt;
|-&lt;br /&gt;
| ExtrusionBridge&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| WorldScript&lt;br /&gt;
| 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| CarParking&lt;br /&gt;
| 0x0016&lt;br /&gt;
|-&lt;br /&gt;
| Windsock&lt;br /&gt;
| 0x0018&lt;br /&gt;
|-&lt;br /&gt;
| SimObject&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| AttachedObject&lt;br /&gt;
| 0x1002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSSectType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Undefined&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Airport&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VorIls&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| Ndb&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| Marker&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| Boundary&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| Geopol&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NameList&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| Vor[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| Ndb[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| ModelData&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x2c&lt;br /&gt;
|-&lt;br /&gt;
| ExclusionRectangle&lt;br /&gt;
| 0x2e&lt;br /&gt;
|-&lt;br /&gt;
| TimeZone&lt;br /&gt;
| 0x2f&lt;br /&gt;
|-&lt;br /&gt;
| ModelIndex&lt;br /&gt;
| 0x30&lt;br /&gt;
|-&lt;br /&gt;
| LandmarkLocation&lt;br /&gt;
| 0x31&lt;br /&gt;
|-&lt;br /&gt;
| CVX&lt;br /&gt;
| 0x65&lt;br /&gt;
|-&lt;br /&gt;
| DEM&lt;br /&gt;
| 0x67&lt;br /&gt;
|-&lt;br /&gt;
| Landclass&lt;br /&gt;
| 0x68&lt;br /&gt;
|-&lt;br /&gt;
| Waterclass&lt;br /&gt;
| 0x69&lt;br /&gt;
|-&lt;br /&gt;
| Regions&lt;br /&gt;
| 0x6a&lt;br /&gt;
|-&lt;br /&gt;
| Population&lt;br /&gt;
| 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| LCLookup&lt;br /&gt;
| 0x6f&lt;br /&gt;
|-&lt;br /&gt;
| Seasons&lt;br /&gt;
| 0x78           &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSVorIlsNdbChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Localizer&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GlideSlope&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| DME&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FuelAvail ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NO&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| PRIOR_REQUEST&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| YES&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FuelType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| 73&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 87&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 130&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 145&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| MOGAS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETA1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETAP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| SQUARE&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CIRCLE&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| MEDICAL&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LegType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CI&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CR&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| FM&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| HA&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| HF&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| HM&lt;br /&gt;
| 0xe&lt;br /&gt;
|-&lt;br /&gt;
| IF&lt;br /&gt;
| 0xf&lt;br /&gt;
|-&lt;br /&gt;
| PI&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| RF&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| TF&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| VA&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| VD&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| VI&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| VM&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| VR&lt;br /&gt;
| 0x17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| LOW&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MEDIUM&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HIGH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MarkerType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| INNER&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MIDDLE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| OUTER&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BACKCOURSE&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NdbType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| COMPASS_POINT&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MH&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OverrideTowerSize ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SMALL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MEDIUM&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| LARGE&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PaintedLineTrueAngle ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| BEGIN&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| END&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BOTH_ENDS&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ALL_POINTS&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PaintedLineType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_MARKED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_MARKED&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_SOLID&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_TAXIWAY&lt;br /&gt;
|-&lt;br /&gt;
| SERVICE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_SOLID&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_YELLOW&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_WHITE&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_RED&lt;br /&gt;
|-&lt;br /&gt;
| SLIM_RED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_BACK&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_BACK&lt;br /&gt;
|-&lt;br /&gt;
| ENHANCED_CENTER&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_MARKED_L&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_MARKED_L&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_SOLID_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_TAXIWAY_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| SERVICE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_SOLID_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_YELLOW_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_WHITE_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_RED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| SLIM_RED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_BACK_LIGHT&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_BACK_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| ENHANCED_CENTER_LIGHTED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingName ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| PARKING&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| N_PARKING&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| NE_PARKING&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| E_PARKING&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| SE_PARKING&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| S_PARKING&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| SW_PARKING&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| W_PARKING&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| NW_PARKING&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| DOCK&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_A&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_B&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_C&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_D&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_E&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| GATE_F&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| GATE_G&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| GATE_H&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| GATE_I&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GATE_J&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| GATE_K&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| GATE_L&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| GATE_M&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| GATE_N&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| GATE_O&lt;br /&gt;
| 0x1a&lt;br /&gt;
|-&lt;br /&gt;
| GATE_P&lt;br /&gt;
| 0x1b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Q&lt;br /&gt;
| 0x1c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_R&lt;br /&gt;
| 0x1d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_S&lt;br /&gt;
| 0x1e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_T&lt;br /&gt;
| 0x1f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_U&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| GATE_V&lt;br /&gt;
| 0x21&lt;br /&gt;
|-&lt;br /&gt;
| GATE_W&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| GATE_X&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Y&lt;br /&gt;
| 0x24&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Z&lt;br /&gt;
| 0x25&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingPushback ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| BOTH&lt;br /&gt;
| 0x03&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingSuffix ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| GATE_A&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| GATE_B&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| GATE_C&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| GATE_D&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| GATE_E&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| GATE_F&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| GATE_G&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| GATE_H&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| GATE_I&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE_J&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| GATE_K&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_L&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_M&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_N&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_O&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_P&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Q&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| GATE_R&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| GATE_S&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| GATE_T&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GATE_U&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| GATE_V&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| GATE_W&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| GATE_X&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Y&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Z&lt;br /&gt;
| 0x1a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_SMALL&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_MEDIUM&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_LARGE&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_CARGO&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_MIL_CARGO&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_MIL_COMBAT&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| GATE_SMALL&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| GATE_MEDIUM&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE_HEAVY&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| DOCK_GA&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| FUEL&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| VEHICLE&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_EXTRA&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_EXTRA&lt;br /&gt;
| 0x0f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Randomness ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| ALWAYS_DISPLAY&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| LOCATION_RANDOM&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| PURE_RANDOM&lt;br /&gt;
| 0x2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RouteType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VICTOR&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| JET&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BOTH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RouteWaypointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| NAMED&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RunwayNumber ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 01&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| 02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 03&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| 04&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| 05&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| 06&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| 07&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| 08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 09&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| 0x1a&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| 0x1b&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| 0x1c&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| 0x1d&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| 0x1e&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| 0x1f&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| 0x21&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| 0x24&lt;br /&gt;
|-&lt;br /&gt;
| NORTH&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NORTHEAST&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| EAST&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| SOUTHEAST&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| SOUTH&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| SOUTHWEST&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| WEST&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| NORTHWEST&lt;br /&gt;
| 0x2c&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Side ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignSize ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| SIZE1&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SIZE2&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| SIZE3&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| SIZE4&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| SIZE5&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| HELIPAD&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| TRACK&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Surface ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| CONCRETE&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| GRASS&lt;br /&gt;
| 0x0001&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| CEMENT&lt;br /&gt;
| 0x0003&lt;br /&gt;
|-&lt;br /&gt;
| ASPHALT&lt;br /&gt;
| 0x0004&lt;br /&gt;
|-&lt;br /&gt;
| CLAY&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| SNOW&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| ICE&lt;br /&gt;
| 0x0009&lt;br /&gt;
|-&lt;br /&gt;
| DIRT&lt;br /&gt;
| 0x000c&lt;br /&gt;
|-&lt;br /&gt;
| CORAL&lt;br /&gt;
| 0x000d&lt;br /&gt;
|-&lt;br /&gt;
| GRAVEL&lt;br /&gt;
| 0x000e&lt;br /&gt;
|-&lt;br /&gt;
| OIL_TREATED&lt;br /&gt;
| 0x000f&lt;br /&gt;
|-&lt;br /&gt;
| STEEL_MATS&lt;br /&gt;
| 0x0010&lt;br /&gt;
|-&lt;br /&gt;
| BITUMINOUS&lt;br /&gt;
| 0x0011&lt;br /&gt;
|-&lt;br /&gt;
| BRICK&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| MACADAM&lt;br /&gt;
| 0x0013&lt;br /&gt;
|-&lt;br /&gt;
| PLANKS&lt;br /&gt;
| 0x0014&lt;br /&gt;
|-&lt;br /&gt;
| SAND&lt;br /&gt;
| 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| SHALE&lt;br /&gt;
| 0x0016&lt;br /&gt;
|-&lt;br /&gt;
| TARMAC&lt;br /&gt;
| 0x0017&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00fe&lt;br /&gt;
|-&lt;br /&gt;
| USE_FS20_MATERIAL&lt;br /&gt;
| 0x0200&lt;br /&gt;
|-&lt;br /&gt;
| USE_FS20_APRON_MATERIAL&lt;br /&gt;
| 0xff03&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiPointOrientation ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| FORWARD&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| REVERSE&lt;br /&gt;
| 0x01&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiPointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| NORMAL&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_NO_DRAW&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT_NO_DRAW&lt;br /&gt;
| 0x06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiwayEdgeType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SOLID&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| DASHED&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| SOLID_DASHED&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiwayPathType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| TAXI&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| PARKING&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| PATH&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CLOSED&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| VEHICLE&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ROAD&lt;br /&gt;
| 0x7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TransitionType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| FULL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| DME&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| GPS&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| AIRWAY&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TurnDirection ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NULL&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| E&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vasi ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VASI21&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| VASI31&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| VASI22&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| VASI32&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| VASI23&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| VASI33&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| PAPI2&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| PAPI4&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| TRICOLOR&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| PVASI&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| TVASI&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| BALL&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| APAP&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| PANELS&lt;br /&gt;
| 0x0e&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VorType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| LOW&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HIGH&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| VOT&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== WaypointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NAMED&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| UNNAMED&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| OFF_ROUTE&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| IAF&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| FAF&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| RNAV&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| VFR&lt;br /&gt;
| 0x9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:File_Formats]] [[Category:MSFS]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=FS20_BGL_File_Format&amp;diff=10976</id>
		<title>FS20 BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=FS20_BGL_File_Format&amp;diff=10976"/>
		<updated>2021-06-30T20:19:50Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Airport.LegContainer.Leg */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox-Applicable-FSVersion&lt;br /&gt;
| MSFS = true&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a terse reference for the FS20 (MSFS) BGL file format. &lt;br /&gt;
&lt;br /&gt;
Much of the original [[BGL File Format|BGL File Format]] information still applies in terms of BGL format and a number of the mathematical transformations used to decode certain data types. &lt;br /&gt;
&lt;br /&gt;
This page should be used in conjunction with that page for a more full understanding of the FS20 BGL format, in particular everything in [[BGL_File_Format#BGL_Common_Format|BGL Common Format]] still holds.&lt;br /&gt;
&lt;br /&gt;
Note that BGL section IDs are encoded in [[#FSSectType|FSSectType]], which are largely identical to FSX with a couple of additions.&lt;br /&gt;
&lt;br /&gt;
= Airport =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0056&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| comCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| startCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| appCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legacyApronCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| helipadCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| towerLon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| towerLat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| towerAlt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| Services&lt;br /&gt;
| fuelService&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| trafficScalar&lt;br /&gt;
| Used as a float - ratio of the byte value over 255&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| starAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| isOnTIN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x36 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| closed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| departureCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| onlyAddIfReplace&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| arrivalCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3a&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3b bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| applyFlatten&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| apronCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedLineCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedPolygonCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| paintedHatchedAreaCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records, which appear immediately afterwards: &lt;br /&gt;
&lt;br /&gt;
* [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* [[#Airport.Tower|Airport.Tower]]&lt;br /&gt;
* [[#Airport.Com|Airport.Com]]&lt;br /&gt;
* [[#Airport.GroundMergingTransfer|Airport.GroundMergingTransfer]]&lt;br /&gt;
* [[#Airport.Runway|Airport.Runway]]&lt;br /&gt;
* [[#Airport.Start|Airport.Start]]&lt;br /&gt;
* [[#Airport.TaxiwayPointContainer|Airport.TaxiwayPointContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayParkingContainer|Airport.TaxiwayParkingContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayPathContainer|Airport.TaxiwayPathContainer]]&lt;br /&gt;
* [[#Airport.TaxiNameContainer|Airport.TaxiNameContainer]]&lt;br /&gt;
* [[#Airport.TaxiwayParkingMfgrName|Airport.TaxiwayParkingMfgrName]]&lt;br /&gt;
* [[#Airport.Apron|Airport.Apron]]&lt;br /&gt;
* [[#Airport.TaxiwaySign|Airport.TaxiwaySign]]&lt;br /&gt;
* [[#Airport.PaintedLine|Airport.PaintedLine]]&lt;br /&gt;
* [[#Airport.PaintedHatchedArea|Airport.PaintedHatchedArea]]&lt;br /&gt;
* [[#Airport.Jetway|Airport.Jetway]]&lt;br /&gt;
* [[#Airport.LightSupport|Airport.LightSupport]]&lt;br /&gt;
* [[#Airport.Approach|Airport.Approach]]&lt;br /&gt;
* [[#Airport.Arrival|Airport.Arrival]]&lt;br /&gt;
* [[#Airport.Departure|Airport.Departure]]&lt;br /&gt;
* [[#Airport.ApronEdgeLights|Airport.ApronEdgeLights]]&lt;br /&gt;
* [[#Airport.BlastFence|Airport.BlastFence]]&lt;br /&gt;
* [[#Airport.BoundaryFence|Airport.BoundaryFence]]&lt;br /&gt;
* [[#Airport.Helipad|Airport.Helipad]]&lt;br /&gt;
* [[#Airport.ProjectedMesh|Airport.ProjectedMesh]]&lt;br /&gt;
* [[#Airport.DeleteAirport|Airport.DeleteAirport]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Name ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0019&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| recSz - 6&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.GroundMergingTransfer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e9&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| groundMergingTransfertBright&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| groundMergingTransfertDark&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Approach ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0024&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| char&lt;br /&gt;
| suffix&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runway&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ApproachType|ApproachType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 4 to 6&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| gpsOverlay&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| missedApproachLegCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| missedAltitude&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records, which appear immediately afterwards: &lt;br /&gt;
&lt;br /&gt;
* Airport.Approach.ApproachLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.Approach.MissedApproachLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.Approach.Transition as [[#Airport.TransitionContainer| Airport.TransitionContainer]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Apron ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d3&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawSurface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawDetail&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| localUV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| stretchUV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationInside&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| opacity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tiling&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| in radians&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| int&lt;br /&gt;
| priority&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| triangleCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: triangleCt x triangles:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex3&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.ApronEdgeLights ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0031&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| edgeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: edgeCt x edges:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertex2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Arrival: see [[#Airport.FsProcedure|Airport.FsProcedure]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.BlastFence: see [[#Airport.VectorPlacement|Airport.VectorPlacement]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.BoundaryFence: see [[#Airport.VectorPlacement|Airport.VectorPlacement]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.Com ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0012&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ComType|ComType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyMHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| recSz - 0xc&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.DeleteAirport ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0033&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allApproaches&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allApronLights&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allAprons&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allFrequencies&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allHelipads&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allRunways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allStarts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allTaxiways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allBlastFences&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allBoundaryFences&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 10 to 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allJetways&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| allControlTowers&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| startCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| freqCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allDepartures&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allArrivals&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allPaintedElements&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allLightSupports&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTaxiwaySigns&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allILSs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTerminalWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| allTerminalNDBs&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: followed potentially by individual runways / starts / frequencies, but no examples of that yet&lt;br /&gt;
&lt;br /&gt;
== Airport.Departure: see [[#Airport.FsProcedure|Airport.FsProcedure]] ==&lt;br /&gt;
&lt;br /&gt;
== Airport.FsProcedure ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) as per particular procedure type&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| runwayTransitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| commonRouteLegCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| enrouteTransitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Airport.FsProcedure.CommonRouteLegs as [[#Airport.LegContainer|Airport.LegContainer]]&lt;br /&gt;
* Airport.FsProcedure.RunwayTransitions as [[#Airport.TransitionContainer|Airport.TransitionContainer]]&lt;br /&gt;
* Airport.FsProcedure.EnrouteTransitions as [[#Airport.TransitionContainer|Airport.TransitionContainer]]&lt;br /&gt;
&lt;br /&gt;
== Airport.Helipad ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0026&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| surface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Helipad|Helipad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| transparent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| closed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| color&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Jetway ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00de&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| parkingNumber&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| gateName&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| suffix&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| scenObjLen1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| scenObjLen2&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: up to 2 [[#SceneryObject|SceneryObject]]s (dependant on if respective scenObjLen is nonzero)&lt;br /&gt;
&lt;br /&gt;
== Airport.LegContainer.Leg ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#LegType|LegType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| altitudeDescriptor&lt;br /&gt;
| ([[#AltitudeDescriptor|AltitudeDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 0 to 1&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| turnDirection&lt;br /&gt;
| ([[#TurnDirection|TurnDirection]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| courseIsTrue&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| timeIsSpecified&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bit 10&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| flyOver&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| recommendedType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| recommendedAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| theta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| rho&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF courseIsTrue&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| trueCourse&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magneticCourse&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF timeIsSpecified&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| time&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE     &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| distance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| speedLimit&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| verticalAngle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 16&lt;br /&gt;
| bytes&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.LegContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| 0x00e1 for ApproachLegs&amp;lt;br/&amp;gt;0x00e2 for MissedApproachLegs&amp;lt;br/&amp;gt;0x00e3 for TransitionLegs&amp;lt;br/&amp;gt;0x00e4 for RunwayTransitionLegs&amp;lt;br/&amp;gt;0x00e5 for CommonRouteLegs&amp;lt;br/&amp;gt;0x00e6 for EnrouteTransitionLegs&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: legCt x [[#Airport.LegContainer.Leg|Airport.LegContainer.Leg]]&lt;br /&gt;
&lt;br /&gt;
== Airport.LightSupport ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0057&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| latitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| longitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| altitude2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.PaintedHatchedArea ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d8&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| type&lt;br /&gt;
| ([[#PaintedLineType|PaintedLineType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.PaintedLine ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00cf&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#PaintedLineType|PaintedLineType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| trueAngle&lt;br /&gt;
| ([[#PaintedLineTrueAngle|PaintedLineTrueAngle]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
== Airport.PaintedPolygon ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCount&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| color&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.ProjectedMesh ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e8&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| priority&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 0&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 1 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: a [[#SceneryObject|SceneryObject]] used as the source of the projected mesh&lt;br /&gt;
&lt;br /&gt;
== Airport.Runway ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00ce&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| transparent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| primaryNumber&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| primaryDesignator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| secondaryNumber&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xb&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| secondaryDesignator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| primaryILSIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| secondaryILSIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| patternAltitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsEdges&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsThreshold&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsFixedDistance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsTouchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsDashes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrecision&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsEdgePavement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSingleEnd&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrimaryClosed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 10&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSecondaryClosed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 11&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsPrimaryStol&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 12&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsSecondaryStol&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 13&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateThreshold&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 14&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateFixedDistance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 bit 15&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternateTouchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsAlternatePrecision&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsLeadingZeroIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| markingsNoThresholdEndArrows&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bits 0 to 1&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| lightsEdge&lt;br /&gt;
| ([[#Lights|Lights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bits 2 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| lightsCenter&lt;br /&gt;
| ([[#Lights|Lights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| lightsCenterRed&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| primaryTakeOff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| primaryLanding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| primaryPattern&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| secondaryTakeOff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| secondaryLanding&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| secondaryPattern&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x33 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x14&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x5c&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* [[#Airport.Runway.VASI|Airport.Runway.VASI]]&lt;br /&gt;
* [[#Airport.Runway.OffsetThreshold|Airport.Runway.OffsetThreshold]]&lt;br /&gt;
* [[#Airport.Runway.BlastPad|Airport.Runway.BlastPad]]&lt;br /&gt;
* [[#Airport.Runway.Overrun|Airport.Runway.Overrun]]&lt;br /&gt;
* [[#Airport.Runway.ApproachLights|Airport.Runway.ApproachLights]]&lt;br /&gt;
* [[#Airport.Runway.FacilityMaterial|Airport.Runway.FacilityMaterial]]&lt;br /&gt;
* [[#Airport.Runway.RunwayDeformation|Airport.Runway.RunwayDeformation]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.ApproachLights ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x00df for Primary, 0x00e0 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 0 to 4&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| system&lt;br /&gt;
| ([[#ApproachLights|ApproachLights]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| endLights&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| reil&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| touchdown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| strobes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| offset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| slope&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.BlastPad ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0007 for Primary, 0x0008 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.FacilityMaterial ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x00cb&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| opacity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| guid&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tilingU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| tilingV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| falloff&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.OffsetThreshold ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0005 for Primary, 0x0006 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.Overrun ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x0065 for Primary, 0x0066 for Secondary&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.RunwayDeformation ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]]) 0x003e&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| ratio&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| controlPointBefore&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| controlPointAfter&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Airport.Runway.VASI ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSRunwayChildType|FSRunwayChildType]])&amp;lt;br/&amp;gt;0x000b for Primary Left, 0x000c for Primary Right&amp;lt;br/&amp;gt;0x000d for Secondary Left, 0x000e for Secondary Right&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Vasi|Vasi]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| biasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| biasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| spacing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Start ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0011&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 4 to 7&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#Start|Start]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiNameContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x001d&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiNameContainer.TaxiName|Airport.TaxiNameContainer.TaxiName]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiNameContainer.TaxiName ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayParkingContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00e7&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayParkingContainer.TaxiwayParking|Airport.TaxiwayParkingContainer.TaxiwayParking]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayParkingContainer.TaxiwayParking ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 5&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| name&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 6 to 7&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| pushBack&lt;br /&gt;
| ([[#ParkingPushback|ParkingPushback]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 8 to 11&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| type&lt;br /&gt;
| ([[#ParkingType|ParkingType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 12 to 23&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| number&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 24 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| airlineCodeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| teeOffset3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: airlineCodeCt x airlineCodes (fixed 4 char strings)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| string&lt;br /&gt;
| airlineCode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, at unknown position pos after that:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| numberMarking&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| suffix&lt;br /&gt;
| ([[#ParkingName|ParkingName]])&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2&lt;br /&gt;
| 0x5&lt;br /&gt;
| byte[]&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| numberBiasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| numberBiasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| numberHeading&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayPathContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d4&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayPathContainer.TaxiwayPath|Airport.TaxiwayPathContainer.TaxiwayPath]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayPathContainer.TaxiwayPath ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| start&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 0 to 11&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| legacyEnd&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 bits 12 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#TaxiwayPathType|TaxiwayPathType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| enhanced&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawSurface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| drawDetail&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF type is RUNWAY&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| centerLine&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| centerLineLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 2 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| leftEdge&lt;br /&gt;
| ([[#TaxiwayEdgeType|TaxiwayEdgeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| leftEdgeLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 5 to 6&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| rightEdge&lt;br /&gt;
| ([[#TaxiwayEdgeType|TaxiwayEdgeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| rightEdgeLighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| fsXsurface&lt;br /&gt;
| ([[#Surface|Surface]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| weightLimit&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| surface&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| ColorationRGBA&lt;br /&gt;
| coloration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| groundMerging&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationAround&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2d bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| excludeVegetationInside&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| end&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwayPointContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x001a&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Airport.TaxiwayPointContainer.TaxiwayPoint|Airport.TaxiwayPointContainer.TaxiwayPoint]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TaxiwayPointContainer.TaxiwayPoint ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#TaxiPointType|TaxiPointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| orientation&lt;br /&gt;
| ([[#TaxiPointOrientation|TaxiPointOrientation]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TaxiwaySign ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x00d9&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| aptTaxiwaySignCt&lt;br /&gt;
| unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| size&lt;br /&gt;
| ([[#SignSize|SignSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| justification&lt;br /&gt;
| ([[#Side|Side]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x3e&lt;br /&gt;
| string&lt;br /&gt;
| label&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.Tower ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]]) 0x0066&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| defaultTower&lt;br /&gt;
|             &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 1 to 2&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| overrideSize&lt;br /&gt;
| ([[#OverrideTowerSize|OverrideTowerSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| overrideLevel&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF defaultTower&lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 8&lt;br /&gt;
| AltitudeDouble&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|- &lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ELSE&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| A [[#SceneryObject|SceneryObject]] is embedded at 0xa&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Airport.TransitionContainer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSProcedureChildType|FSProcedureChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF childType == RunwayTransitions&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 3&lt;br /&gt;
| byte[]&lt;br /&gt;
| unk&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: transitionCt x [[#Airport.TransitionContainer.Transition|Airport.TransitionContainer.Transition]]&lt;br /&gt;
&lt;br /&gt;
=== Airport.TransitionContainer.Transition ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| transitionType&lt;br /&gt;
| ([[#TransitionType|TransitionType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| legCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| fixType&lt;br /&gt;
| ([[#FixType|FixType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| fixAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitude&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| IF transitionType == DME&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| dmeAirport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| int&lt;br /&gt;
| radial&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| DistanceFloat&lt;br /&gt;
| distance&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;| ENDIF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: legCt x [[#Airport.Leg|Airport.Leg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Airport.VectorPlacement ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| childType&lt;br /&gt;
| ([[#FSAirportChildType|FSAirportChildType]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| profile&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Boundary =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0020&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#BoundaryType|BoundaryType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 0 to 3&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| maximumAltitudeType&lt;br /&gt;
| ([[#AltitudeType|AltitudeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bits 4 to 7&lt;br /&gt;
| 1&lt;br /&gt;
| partialbyte&lt;br /&gt;
| minimumAltitudeType&lt;br /&gt;
| ([[#AltitudeType|AltitudeType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lonMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| altitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lonMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| altitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Boundary.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Boundary.Com as [[#Airport.Com|Airport.Com]]&lt;br /&gt;
&lt;br /&gt;
== Boundary.Name: see [[#Airport.Name|Airport.Name]] ==&lt;br /&gt;
&lt;br /&gt;
== Boundary.Com: see [[#Airport.Com|Airport.Com]] ==&lt;br /&gt;
&lt;br /&gt;
== Boundary.BoundaryDefContainer ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSBoundaryChildType|FSBoundaryChildType]]) 0x0021&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: subRecCt x [[#Boundary.BoundaryDefContainer.BoundaryDef|Boundary.BoundaryDefContainer.BoundaryDef]]&lt;br /&gt;
&lt;br /&gt;
=== Boundary.BoundaryDefContainer.BoundaryDef ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| boundaryDefType&lt;br /&gt;
| ([[#FSBoundaryDefType|FSBoundaryDefType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| index&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then based on the type, choose a subtype:&lt;br /&gt;
&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Com|BoundaryDefContainer.BoundaryDef.Com]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Origin|BoundaryDefContainer.BoundaryDef.Origin]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Circle|BoundaryDefContainer.BoundaryDef.Circle]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Line|BoundaryDefContainer.BoundaryDef.Line]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Arc|BoundaryDefContainer.BoundaryDef.Arc]]&lt;br /&gt;
* [[#BoundaryDefContainer.BoundaryDef.Start|BoundaryDefContainer.BoundaryDef.Start]]&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Com: unknown ====&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Origin ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Circle ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| radius&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Line ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Arc ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Boundary.BoundaryDefContainer.BoundaryDef.Start ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DeleteAirportNavigation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00db&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeleteNavigation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00da&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 0&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 1&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllVORs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 2&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllNDBs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 3&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllTerminalWaypoints&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 4&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllTerminalNDBs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 5&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllILSs&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 6&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllApproaches&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 7&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllDepartures&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 8&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllArrivals&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bit 9&lt;br /&gt;
| 2&lt;br /&gt;
| bool&lt;br /&gt;
| deleteAllFrequencies&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ExclusionRectangle =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 3&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeAllObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 4&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeBeaconObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 5&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeEffectObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 6&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeGenericBuildingObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 7&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeLibraryObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 8&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeTaxiwaySignObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 9&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeTriggerObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 10&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeWindsockObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 11&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeExtrusionBridgeObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 12&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeSimObjects&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 13&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeWorldScripts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 14&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeCarParking&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 15&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludeRectangles&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bit 16&lt;br /&gt;
| 4&lt;br /&gt;
| bool&lt;br /&gt;
| excludePolygons&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| longitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| longitudeMaximum&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| latitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAirportSummary =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0032&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 bits 5 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| approachAvailability&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| longRwyLength&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| longRwyHeading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| Services&lt;br /&gt;
| fuelService&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsIndexMember =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 4&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| rectype&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 5 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airport[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidV&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsNameList =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0027&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| always zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| regionCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| countryCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| stateCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| cityCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| airportCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| identCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| regionOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| countryOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| stateOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| cityOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| airportOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| identOffset&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: identCt x following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| region&lt;br /&gt;
| regionNames[regionIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| country&lt;br /&gt;
| countryNames[countryIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x2 bits 4 to 15&lt;br /&gt;
| 2&lt;br /&gt;
| partialushort&lt;br /&gt;
| state&lt;br /&gt;
| stateNames[stateIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| city&lt;br /&gt;
| cityNames[cityIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| airport&lt;br /&gt;
| airportNames[airportIdx]&lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| icao&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x0c&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| regionCode?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x10&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x12&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| qmidU&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LandmarkLocation =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x00ea&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1e&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| nameLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| typeLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| ownerLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| nameLen&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 + nameLen&lt;br /&gt;
| typeLen&lt;br /&gt;
| string&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 + nameLen + typeLen&lt;br /&gt;
| ownerLen&lt;br /&gt;
| string&lt;br /&gt;
| owner&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Marker =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0018&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#MarkerType|MarkerType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Ndb =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0017&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| ([[#NdbType|NdbType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyKHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards:&lt;br /&gt;
* Ndb.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
&lt;br /&gt;
= Route =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| routeType&lt;br /&gt;
| ([[#RouteType|RouteType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 8&lt;br /&gt;
| string&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: next (offset 0x9) and previous (offset 0x15) route elements as [[#Route.PreviousNext|Route.PreviousNext]]&lt;br /&gt;
&lt;br /&gt;
== Route.PreviousNext ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 0 to 2&lt;br /&gt;
| 4&lt;br /&gt;
| partialuint&lt;br /&gt;
| waypointType&lt;br /&gt;
| ([[#RouteWaypointType|RouteWaypointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 bits 5 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeFloat&lt;br /&gt;
| altitudeMinimum&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SceneryObject =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x0025&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| altitudeIsAgl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 1&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noAutogenSuppression&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noCrash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 3&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noFog&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noShadow&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noZWrite&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 6&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| noZTest&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 bit 7&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| hideOnTIN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| pitch&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Pitch calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| bank&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Bank calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 2&lt;br /&gt;
| short&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| imageComplexity&lt;br /&gt;
| ([[#Complexity|Complexity]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This record has multiple sub-types:&lt;br /&gt;
* [[#SceneryObject.LibraryObject|SceneryObject.LibraryObject]]&lt;br /&gt;
* [[#SceneryObject.Windsock|SceneryObject.Windsock]]&lt;br /&gt;
* [[#SceneryObject.WorldScript|SceneryObject.WorldScript]]&lt;br /&gt;
* [[#SceneryObject.SimObject|SceneryObject.SimObject]]&lt;br /&gt;
* [[#SceneryObject.CarParking|SceneryObject.CarParking]]&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* [[#SceneryObject.AttachedObject|SceneryObject.AttachedObject]]&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.LibraryObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| name&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.Windsock ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| poleHeight&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| sockLength&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| poleColor&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 4&lt;br /&gt;
| Color&lt;br /&gt;
| sockColor&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3c bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| lighted&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3e&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3f&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| string&lt;br /&gt;
| containerTitle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + containerTitleLen + 1&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| string&lt;br /&gt;
| containerPath&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.WorldScript ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| objectFileLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| objectFileLen&lt;br /&gt;
| string&lt;br /&gt;
| objectFile&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.SimObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| scale&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| containerTitleLen&lt;br /&gt;
| string&lt;br /&gt;
| containerTitle&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34 + containerTitleLen + 1&lt;br /&gt;
| containerPathLen&lt;br /&gt;
| string&lt;br /&gt;
| containerPath&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.CarParking ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| vertexCt&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then: vertexCt x vertices:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| 8&lt;br /&gt;
| LatitudeDouble&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| LongitudeDouble&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.AttachedObject ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| beginRecTypeRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| beginRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subType&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| subRecSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| attachpointNameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xa&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| pitch&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Pitch calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| bank&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Bank calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xe&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| heading&lt;br /&gt;
| [[BGL_File_Format#Pitch.2C_bank_and_heading|Heading calculation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasX&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasY&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| biasZ&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 16&lt;br /&gt;
| Guid&lt;br /&gt;
| instanceId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2c&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| probability&lt;br /&gt;
| Ratio over 0x10000&lt;br /&gt;
|-&lt;br /&gt;
| 0x2e&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| randomness&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset&lt;br /&gt;
| *** unknown ***&lt;br /&gt;
| string&lt;br /&gt;
| attachpointName&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset + unknown&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| endRecTypeRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pos + attachpointNameOffset + unknown + 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| endRecSz&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards:&lt;br /&gt;
* [[#SceneryObject.Beacon|SceneryObject.Beacon]]&lt;br /&gt;
&lt;br /&gt;
== SceneryObject.Beacon ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| type&lt;br /&gt;
| thisBeaconType.type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| baseType&lt;br /&gt;
| thisBeaconType.baseType&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| unknown&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VorIls =&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x13&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| vorType&lt;br /&gt;
| ([[#VorType|VorType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| FrequencyMHz&lt;br /&gt;
| frequency&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1c&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| ident&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, if the type is ILS:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 2&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| backCourse&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| airportIdent&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Ils.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Ils.Dme as [[#VorIls.Dme|VorIls.Dme]]&lt;br /&gt;
* [[#Ils.GlideSlope|Ils.GlideSlope]]&lt;br /&gt;
* [[#Ils.Localizer|Ils.Localizer]]&lt;br /&gt;
&lt;br /&gt;
Otherwise, if the type is VOR:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| type&lt;br /&gt;
| ([[#VorType|VorType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 0&lt;br /&gt;
| 1&lt;br /&gt;
| boolFalse&lt;br /&gt;
| dmeOnly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 4&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| dme&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 bit 5&lt;br /&gt;
| 1&lt;br /&gt;
| bool&lt;br /&gt;
| nav&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| region&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It has the following child records which appear immediately afterwards: &lt;br /&gt;
* Vor.Name as [[#Airport.Name|Airport.Name]]&lt;br /&gt;
* Vor.Dme as [[#VorIls.Dme|VorIls.Dme]]&lt;br /&gt;
    &lt;br /&gt;
== Ils.Localizer ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| number&lt;br /&gt;
| ([[#RunwayNumber|RunwayNumber]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| designator&lt;br /&gt;
| ([[#Designator|Designator]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| heading&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| width&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VorIls.Dme ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ils.GlideSlope ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| AltitudeInt32&lt;br /&gt;
| alt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Distance&lt;br /&gt;
| range&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Waypoint =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Byte length&lt;br /&gt;
! Value type&lt;br /&gt;
! Name&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| ushort&lt;br /&gt;
| recType&lt;br /&gt;
| ([[#FSDataType|FSDataType]]) 0x22&lt;br /&gt;
|- &lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| uint&lt;br /&gt;
| recSz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| waypointType&lt;br /&gt;
| ([[#WaypointType|WaypointType]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| byte&lt;br /&gt;
| routeCt&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LongitudeInt32]]&lt;br /&gt;
| lon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xc&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#Computing_Longitude_and_Latitude_from_a_DWORD_value|LatitudeInt32]]&lt;br /&gt;
| lat&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| float&lt;br /&gt;
| magvar&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointIdent&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 bits 0 to 10&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointRegion&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 bits 11 to 31&lt;br /&gt;
| 4&lt;br /&gt;
| [[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]&lt;br /&gt;
| waypointAirport&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then: routeCt x [[#Route|Route]]&lt;br /&gt;
&lt;br /&gt;
= Enumerated Types =&lt;br /&gt;
&lt;br /&gt;
Naming convention: &lt;br /&gt;
&lt;br /&gt;
* Names beginning with &amp;quot;FS&amp;quot; are enumerated types which are not defined within the bglcomp.xsd format.&lt;br /&gt;
* All other names correspond with bglcomp.xsd.&lt;br /&gt;
&lt;br /&gt;
== AltitudeDescriptor ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| EMPTY&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| +&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| C&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| G&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| I&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| J&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| V&lt;br /&gt;
| 0xa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AltitudeType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MEAN_SEA_LEVEL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| ABOVE_GROUND_LEVEL&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| UNLIMITED&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ApproachLights ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| ODALS&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MALSF&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| MALSR&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| SSALF&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| SSALR&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| ALSF1&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ALSF2&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| RAIL&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| CALVERT&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| CALVERT2&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| MALS&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| SALS&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| SALSF&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| SSALS&lt;br /&gt;
| 0xe&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ApproachType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| GPS&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| SDF&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| LDA&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| VORDME&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| NDBDME&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| RNAV&lt;br /&gt;
| 0xA&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER_BACKCOURSE&lt;br /&gt;
| 0xB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArcDirection ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| CLOCKWISE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| COUNTER_CLOCKWISE&lt;br /&gt;
| 0x2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== BoundaryType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_A&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_B&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_C&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_D&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_E&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_F&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| CLASS_G&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| TOWER&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| GROUND&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| DEPARTURE&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| APPROACH&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| MOA&lt;br /&gt;
| 0xe&lt;br /&gt;
|-&lt;br /&gt;
| RESTRICTED&lt;br /&gt;
| 0xf&lt;br /&gt;
|-&lt;br /&gt;
| PROHIBITED&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| WARNING&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| ALERT&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| DANGER&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| NATIONAL_PARK&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| MODEC&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| RADAR&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| TRAINING&lt;br /&gt;
| 0x17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Complexity ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VERY_SPARSE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SPARSE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| NORMAL&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| DENSE&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VERY_DENSE&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| EXTREMELY_DENSE&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ComType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| ATIS&lt;br /&gt;
| 0x0001&lt;br /&gt;
|-&lt;br /&gt;
| MULTICOM&lt;br /&gt;
| 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| UNICOM&lt;br /&gt;
| 0x0003&lt;br /&gt;
|-&lt;br /&gt;
| CTAF&lt;br /&gt;
| 0x0004&lt;br /&gt;
|-&lt;br /&gt;
| GROUND&lt;br /&gt;
| 0x0005&lt;br /&gt;
|-&lt;br /&gt;
| TOWER&lt;br /&gt;
| 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| APPROACH&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| DEPARTURE&lt;br /&gt;
| 0x0009&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x000A&lt;br /&gt;
|-&lt;br /&gt;
| FSS&lt;br /&gt;
| 0x000B&lt;br /&gt;
|-&lt;br /&gt;
| AWOS&lt;br /&gt;
| 0x000C&lt;br /&gt;
|-&lt;br /&gt;
| ASOS&lt;br /&gt;
| 0x000D&lt;br /&gt;
|-&lt;br /&gt;
| CLEARANCE_PRE_TAXI&lt;br /&gt;
| 0x000E&lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
| 0x000F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designator ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| CENTER&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 0x06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== End ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| PRIMARY&lt;br /&gt;
|-&lt;br /&gt;
| SECONDARY&lt;br /&gt;
|-&lt;br /&gt;
| BASE&lt;br /&gt;
|-&lt;br /&gt;
| RECIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FixType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| AIRPORT&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL_NDB&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| WAYPOINT&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL_WAYPOINT&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| LOCALIZER&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSAirportChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Start&lt;br /&gt;
| 0x0011&lt;br /&gt;
|-&lt;br /&gt;
| Com&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayPoint&lt;br /&gt;
| 0x001a&lt;br /&gt;
|-&lt;br /&gt;
| TaxiName&lt;br /&gt;
| 0x001d&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x0022&lt;br /&gt;
|-&lt;br /&gt;
| Approach&lt;br /&gt;
| 0x0024&lt;br /&gt;
|-&lt;br /&gt;
| Helipad&lt;br /&gt;
| 0x0026&lt;br /&gt;
|-&lt;br /&gt;
| ApronEdgeLights&lt;br /&gt;
| 0x0031&lt;br /&gt;
|-&lt;br /&gt;
| DeleteAirport&lt;br /&gt;
| 0x0033&lt;br /&gt;
|-&lt;br /&gt;
| BlastFence&lt;br /&gt;
| 0x0038&lt;br /&gt;
|-&lt;br /&gt;
| BoundaryFence&lt;br /&gt;
| 0x0039&lt;br /&gt;
|-&lt;br /&gt;
| Departure&lt;br /&gt;
| 0x0042&lt;br /&gt;
|-&lt;br /&gt;
| Arrival&lt;br /&gt;
| 0x0048&lt;br /&gt;
|-&lt;br /&gt;
| LightSupport&lt;br /&gt;
| 0x0057&lt;br /&gt;
|-&lt;br /&gt;
| Tower&lt;br /&gt;
| 0x0066&lt;br /&gt;
|-&lt;br /&gt;
| Runway&lt;br /&gt;
| 0x00ce&lt;br /&gt;
|-&lt;br /&gt;
| PaintedLine&lt;br /&gt;
| 0x00cf&lt;br /&gt;
|-&lt;br /&gt;
| Apron&lt;br /&gt;
| 0x00d3&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayPath&lt;br /&gt;
| 0x00d4&lt;br /&gt;
|-&lt;br /&gt;
| PaintedHatchedArea&lt;br /&gt;
| 0x00d8&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x00d9&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayParkingMfgrName&lt;br /&gt;
| 0x00dd&lt;br /&gt;
|-&lt;br /&gt;
| Jetway&lt;br /&gt;
| 0x00de&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwayParking&lt;br /&gt;
| 0x00e7&lt;br /&gt;
|-&lt;br /&gt;
| ProjectedMesh&lt;br /&gt;
| 0x00e8&lt;br /&gt;
|-&lt;br /&gt;
| GroundMergingTransfer&lt;br /&gt;
| 0x00e9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSAttachedObjectType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Beacon&lt;br /&gt;
| 0x11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSBoundaryChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Com&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| BoundaryDef&lt;br /&gt;
| 0x0021&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSBoundaryDefType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| START&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| LINE&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| ORIGIN&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ARC_CW&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| ARC_CCW&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CIRCLE&lt;br /&gt;
| 0x6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSDataType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Undefined&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| Airport&lt;br /&gt;
| 0x56&lt;br /&gt;
|-&lt;br /&gt;
| GenericBuilding&lt;br /&gt;
| 0x0A&lt;br /&gt;
|-&lt;br /&gt;
| LibraryObject&lt;br /&gt;
| 0x0B&lt;br /&gt;
|-&lt;br /&gt;
| Windsock&lt;br /&gt;
| 0x0C&lt;br /&gt;
|-&lt;br /&gt;
| Effect&lt;br /&gt;
| 0x0D&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x0E&lt;br /&gt;
|-&lt;br /&gt;
| Trigger&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| ExtrusionBridge&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| VorIls&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| WorldScript&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| CarParking&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| Ndb&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| Marker&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| SimObject&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| Boundary&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| Geopol&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NameList&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| Vor[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| Ndb[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| ModelData&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x2c&lt;br /&gt;
|-&lt;br /&gt;
| ExclusionRectangle&lt;br /&gt;
| 0x2e&lt;br /&gt;
|-&lt;br /&gt;
| TimeZone&lt;br /&gt;
| 0x2f&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x32&lt;br /&gt;
|-&lt;br /&gt;
| CVX&lt;br /&gt;
| 0x65&lt;br /&gt;
|-&lt;br /&gt;
| DEM&lt;br /&gt;
| 0x67&lt;br /&gt;
|-&lt;br /&gt;
| Landclass&lt;br /&gt;
| 0x68&lt;br /&gt;
|-&lt;br /&gt;
| Waterclass&lt;br /&gt;
| 0x69&lt;br /&gt;
|-&lt;br /&gt;
| Regions&lt;br /&gt;
| 0x6a&lt;br /&gt;
|-&lt;br /&gt;
| Population&lt;br /&gt;
| 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| LCLookup&lt;br /&gt;
| 0x6f&lt;br /&gt;
|-&lt;br /&gt;
| Seasons&lt;br /&gt;
| 0x78&lt;br /&gt;
|-&lt;br /&gt;
| DeleteNavigation&lt;br /&gt;
| 0xDA&lt;br /&gt;
|-&lt;br /&gt;
| DeleteAirportNavigation&lt;br /&gt;
| 0xDB&lt;br /&gt;
|-&lt;br /&gt;
| LandmarkLocation&lt;br /&gt;
| 0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSProcedureChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| Transition&lt;br /&gt;
| 0x002c&lt;br /&gt;
|-&lt;br /&gt;
| RunwayTransitions&lt;br /&gt;
| 0x0046&lt;br /&gt;
|-&lt;br /&gt;
| EnrouteTransitions&lt;br /&gt;
| 0x0047&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLegs&lt;br /&gt;
| 0x00e1&lt;br /&gt;
|-&lt;br /&gt;
| MissedApproachLegs&lt;br /&gt;
| 0x00e2&lt;br /&gt;
|-&lt;br /&gt;
| TransitionLegs&lt;br /&gt;
| 0x00e3&lt;br /&gt;
|-&lt;br /&gt;
| RunwayTransitionLegs&lt;br /&gt;
| 0x00e4&lt;br /&gt;
|-&lt;br /&gt;
| CommonRouteLegs&lt;br /&gt;
| 0x00e5&lt;br /&gt;
|-&lt;br /&gt;
| EnrouteTransitionLegs&lt;br /&gt;
| 0x00e6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSRunwayChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| OffsetThresholdPri&lt;br /&gt;
| 0x0005&lt;br /&gt;
|-&lt;br /&gt;
| OffsetThresholdSec&lt;br /&gt;
| 0x0006&lt;br /&gt;
|-&lt;br /&gt;
| BlastPadPri&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| BlastPadSec&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| VASIPriL&lt;br /&gt;
| 0x000b&lt;br /&gt;
|-&lt;br /&gt;
| VASIPriR&lt;br /&gt;
| 0x000c&lt;br /&gt;
|-&lt;br /&gt;
| VASISecL&lt;br /&gt;
| 0x000d&lt;br /&gt;
|-&lt;br /&gt;
| VASISecR&lt;br /&gt;
| 0x000e&lt;br /&gt;
|-&lt;br /&gt;
| RunwayDeformation&lt;br /&gt;
| 0x003e&lt;br /&gt;
|-&lt;br /&gt;
| OverrunPri&lt;br /&gt;
| 0x0065&lt;br /&gt;
|-&lt;br /&gt;
| OverrunSec&lt;br /&gt;
| 0x0066&lt;br /&gt;
|-&lt;br /&gt;
| FacilityMaterial&lt;br /&gt;
| 0x00cb&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLightsPri&lt;br /&gt;
| 0x00df&lt;br /&gt;
|-&lt;br /&gt;
| ApproachLightsSec&lt;br /&gt;
| 0x00e0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSSceneryChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| GenericBuilding&lt;br /&gt;
| 0x000A&lt;br /&gt;
|-&lt;br /&gt;
| LibraryObject&lt;br /&gt;
| 0x000B&lt;br /&gt;
|-&lt;br /&gt;
| Effect&lt;br /&gt;
| 0x000D&lt;br /&gt;
|-&lt;br /&gt;
| TaxiwaySign&lt;br /&gt;
| 0x000E&lt;br /&gt;
|-&lt;br /&gt;
| Trigger&lt;br /&gt;
| 0x0010&lt;br /&gt;
|-&lt;br /&gt;
| ExtrusionBridge&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| WorldScript&lt;br /&gt;
| 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| CarParking&lt;br /&gt;
| 0x0016&lt;br /&gt;
|-&lt;br /&gt;
| Windsock&lt;br /&gt;
| 0x0018&lt;br /&gt;
|-&lt;br /&gt;
| SimObject&lt;br /&gt;
| 0x0019&lt;br /&gt;
|-&lt;br /&gt;
| AttachedObject&lt;br /&gt;
| 0x1002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSSectType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Undefined&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Airport&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VorIls&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| Ndb&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| Marker&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| Boundary&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| Geopol&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NameList&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| Vor[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| Ndb[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| Waypoint[[BGL_File_Format#ICAO_Identifiers_and_region_codes|Icao]]Index&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| ModelData&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| AirportSummary&lt;br /&gt;
| 0x2c&lt;br /&gt;
|-&lt;br /&gt;
| ExclusionRectangle&lt;br /&gt;
| 0x2e&lt;br /&gt;
|-&lt;br /&gt;
| TimeZone&lt;br /&gt;
| 0x2f&lt;br /&gt;
|-&lt;br /&gt;
| ModelIndex&lt;br /&gt;
| 0x30&lt;br /&gt;
|-&lt;br /&gt;
| LandmarkLocation&lt;br /&gt;
| 0x31&lt;br /&gt;
|-&lt;br /&gt;
| CVX&lt;br /&gt;
| 0x65&lt;br /&gt;
|-&lt;br /&gt;
| DEM&lt;br /&gt;
| 0x67&lt;br /&gt;
|-&lt;br /&gt;
| Landclass&lt;br /&gt;
| 0x68&lt;br /&gt;
|-&lt;br /&gt;
| Waterclass&lt;br /&gt;
| 0x69&lt;br /&gt;
|-&lt;br /&gt;
| Regions&lt;br /&gt;
| 0x6a&lt;br /&gt;
|-&lt;br /&gt;
| Population&lt;br /&gt;
| 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| LCLookup&lt;br /&gt;
| 0x6f&lt;br /&gt;
|-&lt;br /&gt;
| Seasons&lt;br /&gt;
| 0x78           &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FSVorIlsNdbChildType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Null&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| Localizer&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GlideSlope&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| DME&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| SceneryObject&lt;br /&gt;
| 0x25&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FuelAvail ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NO&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| PRIOR_REQUEST&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| YES&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FuelType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| 73&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 87&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 130&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 145&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| MOGAS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETA1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETAP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JETB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JET5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| SQUARE&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CIRCLE&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| MEDICAL&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LegType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CI&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| CR&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| 0x9&lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| 0xa&lt;br /&gt;
|-&lt;br /&gt;
| FM&lt;br /&gt;
| 0xb&lt;br /&gt;
|-&lt;br /&gt;
| HA&lt;br /&gt;
| 0xc&lt;br /&gt;
|-&lt;br /&gt;
| HF&lt;br /&gt;
| 0xd&lt;br /&gt;
|-&lt;br /&gt;
| HM&lt;br /&gt;
| 0xe&lt;br /&gt;
|-&lt;br /&gt;
| IF&lt;br /&gt;
| 0xf&lt;br /&gt;
|-&lt;br /&gt;
| PI&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| RF&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| TF&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| VA&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| VD&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| VI&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| VM&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| VR&lt;br /&gt;
| 0x17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| LOW&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MEDIUM&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HIGH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MarkerType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| INNER&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MIDDLE&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| OUTER&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BACKCOURSE&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NdbType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| COMPASS_POINT&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| MH&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| H&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OverrideTowerSize ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SMALL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| MEDIUM&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| LARGE&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PaintedLineTrueAngle ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| BEGIN&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| END&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BOTH_ENDS&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ALL_POINTS&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PaintedLineType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_MARKED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_MARKED&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_SOLID&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_TAXIWAY&lt;br /&gt;
|-&lt;br /&gt;
| SERVICE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_SOLID&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_DASHED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_YELLOW&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_WHITE&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_RED&lt;br /&gt;
|-&lt;br /&gt;
| SLIM_RED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_BACK&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_BACK&lt;br /&gt;
|-&lt;br /&gt;
| ENHANCED_CENTER&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_MARKED_L&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_MARKED_L&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_FORWARD_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_BACKWARD_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_SOLID_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_LINE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_TAXIWAY_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| SERVICE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_SOLID_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SERVICE_DASHED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_YELLOW_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_WHITE_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| WIDE_RED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| SLIM_RED_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| EDGE_SOLID_ORTHO_BACK_LIGHT&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| NON_MOVEMENT_BACK_LIGHTED&lt;br /&gt;
|-&lt;br /&gt;
| ENHANCED_CENTER_LIGHTED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingName ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| PARKING&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| N_PARKING&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| NE_PARKING&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| E_PARKING&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| SE_PARKING&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| S_PARKING&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| SW_PARKING&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| W_PARKING&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| NW_PARKING&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| DOCK&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_A&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_B&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_C&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_D&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_E&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| GATE_F&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| GATE_G&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| GATE_H&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| GATE_I&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GATE_J&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| GATE_K&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| GATE_L&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| GATE_M&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| GATE_N&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| GATE_O&lt;br /&gt;
| 0x1a&lt;br /&gt;
|-&lt;br /&gt;
| GATE_P&lt;br /&gt;
| 0x1b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Q&lt;br /&gt;
| 0x1c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_R&lt;br /&gt;
| 0x1d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_S&lt;br /&gt;
| 0x1e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_T&lt;br /&gt;
| 0x1f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_U&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| GATE_V&lt;br /&gt;
| 0x21&lt;br /&gt;
|-&lt;br /&gt;
| GATE_W&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| GATE_X&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Y&lt;br /&gt;
| 0x24&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Z&lt;br /&gt;
| 0x25&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingPushback ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| BOTH&lt;br /&gt;
| 0x03&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingSuffix ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| GATE_A&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| GATE_B&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| GATE_C&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| GATE_D&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| GATE_E&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| GATE_F&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| GATE_G&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| GATE_H&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| GATE_I&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE_J&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| GATE_K&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| GATE_L&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| GATE_M&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| GATE_N&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_O&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| GATE_P&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Q&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| GATE_R&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| GATE_S&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| GATE_T&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| GATE_U&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| GATE_V&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| GATE_W&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| GATE_X&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Y&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| GATE_Z&lt;br /&gt;
| 0x1a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ParkingType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_SMALL&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_MEDIUM&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_LARGE&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_CARGO&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_MIL_CARGO&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_MIL_COMBAT&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| GATE_SMALL&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| GATE_MEDIUM&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| GATE_HEAVY&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| DOCK_GA&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| FUEL&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| VEHICLE&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| RAMP_GA_EXTRA&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| GATE_EXTRA&lt;br /&gt;
| 0x0f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Randomness ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| ALWAYS_DISPLAY&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| LOCATION_RANDOM&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| PURE_RANDOM&lt;br /&gt;
| 0x2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RouteType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VICTOR&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| JET&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| BOTH&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RouteWaypointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| NAMED&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RunwayNumber ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 01&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| 02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 03&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| 04&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| 05&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| 06&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| 07&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| 08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 09&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 0x0e&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 0x0f&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| 0x12&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| 0x13&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| 0x14&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| 0x15&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| 0x17&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| 0x18&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| 0x1a&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| 0x1b&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| 0x1c&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| 0x1d&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| 0x1e&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| 0x1f&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| 0x21&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| 0x22&lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| 0x23&lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| 0x24&lt;br /&gt;
|-&lt;br /&gt;
| NORTH&lt;br /&gt;
| 0x25&lt;br /&gt;
|-&lt;br /&gt;
| NORTHEAST&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| EAST&lt;br /&gt;
| 0x27&lt;br /&gt;
|-&lt;br /&gt;
| SOUTHEAST&lt;br /&gt;
| 0x28&lt;br /&gt;
|-&lt;br /&gt;
| SOUTH&lt;br /&gt;
| 0x29&lt;br /&gt;
|-&lt;br /&gt;
| SOUTHWEST&lt;br /&gt;
| 0x2a&lt;br /&gt;
|-&lt;br /&gt;
| WEST&lt;br /&gt;
| 0x2b&lt;br /&gt;
|-&lt;br /&gt;
| NORTHWEST&lt;br /&gt;
| 0x2c&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Side ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| LEFT&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| RIGHT&lt;br /&gt;
| 0x1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignSize ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| SIZE1&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SIZE2&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| SIZE3&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| SIZE4&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| SIZE5&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| HELIPAD&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| TRACK&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Surface ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| CONCRETE&lt;br /&gt;
| 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| GRASS&lt;br /&gt;
| 0x0001&lt;br /&gt;
|-&lt;br /&gt;
| WATER&lt;br /&gt;
| 0x0002&lt;br /&gt;
|-&lt;br /&gt;
| CEMENT&lt;br /&gt;
| 0x0003&lt;br /&gt;
|-&lt;br /&gt;
| ASPHALT&lt;br /&gt;
| 0x0004&lt;br /&gt;
|-&lt;br /&gt;
| CLAY&lt;br /&gt;
| 0x0007&lt;br /&gt;
|-&lt;br /&gt;
| SNOW&lt;br /&gt;
| 0x0008&lt;br /&gt;
|-&lt;br /&gt;
| ICE&lt;br /&gt;
| 0x0009&lt;br /&gt;
|-&lt;br /&gt;
| DIRT&lt;br /&gt;
| 0x000c&lt;br /&gt;
|-&lt;br /&gt;
| CORAL&lt;br /&gt;
| 0x000d&lt;br /&gt;
|-&lt;br /&gt;
| GRAVEL&lt;br /&gt;
| 0x000e&lt;br /&gt;
|-&lt;br /&gt;
| OIL_TREATED&lt;br /&gt;
| 0x000f&lt;br /&gt;
|-&lt;br /&gt;
| STEEL_MATS&lt;br /&gt;
| 0x0010&lt;br /&gt;
|-&lt;br /&gt;
| BITUMINOUS&lt;br /&gt;
| 0x0011&lt;br /&gt;
|-&lt;br /&gt;
| BRICK&lt;br /&gt;
| 0x0012&lt;br /&gt;
|-&lt;br /&gt;
| MACADAM&lt;br /&gt;
| 0x0013&lt;br /&gt;
|-&lt;br /&gt;
| PLANKS&lt;br /&gt;
| 0x0014&lt;br /&gt;
|-&lt;br /&gt;
| SAND&lt;br /&gt;
| 0x0015&lt;br /&gt;
|-&lt;br /&gt;
| SHALE&lt;br /&gt;
| 0x0016&lt;br /&gt;
|-&lt;br /&gt;
| TARMAC&lt;br /&gt;
| 0x0017&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00fe&lt;br /&gt;
|-&lt;br /&gt;
| USE_FS20_MATERIAL&lt;br /&gt;
| 0x0200&lt;br /&gt;
|-&lt;br /&gt;
| USE_FS20_APRON_MATERIAL&lt;br /&gt;
| 0xff03&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiPointOrientation ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| FORWARD&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| REVERSE&lt;br /&gt;
| 0x01&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiPointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x00&lt;br /&gt;
|-&lt;br /&gt;
| NORMAL&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| HOLD_SHORT_NO_DRAW&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| ILS_HOLD_SHORT_NO_DRAW&lt;br /&gt;
| 0x06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiwayEdgeType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| SOLID&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| DASHED&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| SOLID_DASHED&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiwayPathType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| UNKNOWN&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| TAXI&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| RUNWAY&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| PARKING&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| PATH&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| CLOSED&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| VEHICLE&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ROAD&lt;br /&gt;
| 0x7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TransitionType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| FULL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| DME&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| GPS&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| AIRWAY&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TurnDirection ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NULL&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| L&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| R&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| E&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vasi ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| VASI21&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| VASI31&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| VASI22&lt;br /&gt;
| 0x03&lt;br /&gt;
|-&lt;br /&gt;
| VASI32&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| VASI23&lt;br /&gt;
| 0x05&lt;br /&gt;
|-&lt;br /&gt;
| VASI33&lt;br /&gt;
| 0x06&lt;br /&gt;
|-&lt;br /&gt;
| PAPI2&lt;br /&gt;
| 0x07&lt;br /&gt;
|-&lt;br /&gt;
| PAPI4&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| TRICOLOR&lt;br /&gt;
| 0x09&lt;br /&gt;
|-&lt;br /&gt;
| PVASI&lt;br /&gt;
| 0x0a&lt;br /&gt;
|-&lt;br /&gt;
| TVASI&lt;br /&gt;
| 0x0b&lt;br /&gt;
|-&lt;br /&gt;
| BALL&lt;br /&gt;
| 0x0c&lt;br /&gt;
|-&lt;br /&gt;
| APAP&lt;br /&gt;
| 0x0d&lt;br /&gt;
|-&lt;br /&gt;
| PANELS&lt;br /&gt;
| 0x0e&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VorType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| TERMINAL&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| LOW&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| HIGH&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| ILS&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| VOT&lt;br /&gt;
| 0x5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== WaypointType ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| NAMED&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| UNNAMED&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| VOR&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| NDB&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| OFF_ROUTE&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| IAF&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| FAF&lt;br /&gt;
| 0x7&lt;br /&gt;
|-&lt;br /&gt;
| RNAV&lt;br /&gt;
| 0x8&lt;br /&gt;
|-&lt;br /&gt;
| VFR&lt;br /&gt;
| 0x9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:File_Formats]] [[Category:MSFS]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10949</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10949"/>
		<updated>2020-12-02T18:36:22Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* AIRPORT (FS2020) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36) or&lt;br /&gt;
* 37 = n&lt;br /&gt;
* 38 = ne&lt;br /&gt;
* 39 = e&lt;br /&gt;
* 40 = se&lt;br /&gt;
* 41 = s&lt;br /&gt;
* 42 = sw&lt;br /&gt;
* 43 = w&lt;br /&gt;
* 44 = nw&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: centerRed flag&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: alternatePrecision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: leadingZeroIdent&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: noThresholdEndArrows&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD_SHORT&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
* 5 = HOLD_SHORT_NO_DRAW&lt;br /&gt;
* 6 = ILS_HOLD_SHORT_NO_DRAW&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 0 = FORWARD&lt;br /&gt;
* 1 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
* 0x6 = VEHICLE&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORT (FS2020) =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0056&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00)&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Closed Airport - Mask: 0x40&amp;lt;br/&amp;gt;Star Airport - Mask : 0x01&amp;lt;br/&amp;gt;TIN Airport - Mask : 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Only Add If Replace&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;10&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Airport record is followed by subrecords, each with the same header structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Sub record size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The number of subrecords is not known but they must fit within the airport size (defined at offset 0x02 of the airport record).&lt;br /&gt;
&lt;br /&gt;
The following table lists the known (to this day) ids for the airport subrecords:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Id&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 (17)&lt;br /&gt;
| RunwayStart&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 (18)&lt;br /&gt;
| Com&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 (25)&lt;br /&gt;
| AirportName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A (26)&lt;br /&gt;
| TaxiWayPoints&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D (29)&lt;br /&gt;
| TaxiNames&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 (38)&lt;br /&gt;
| Helipad&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 (49)&lt;br /&gt;
| ApronEdgeLights&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 (51)&lt;br /&gt;
| AirportDelete&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 (64)&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 (102)&lt;br /&gt;
| Tower&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE (206)&lt;br /&gt;
| Runway&lt;br /&gt;
|-&lt;br /&gt;
| 0xCF (207)&lt;br /&gt;
| PaintedLine&lt;br /&gt;
|-&lt;br /&gt;
| 0xD3 (211)&lt;br /&gt;
| Apron&lt;br /&gt;
|-&lt;br /&gt;
| 0xD4 (212)&lt;br /&gt;
| TaxiWayPaths&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 (216)&lt;br /&gt;
| PaintedHatchedArea&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 (217)&lt;br /&gt;
| TaxiSign&lt;br /&gt;
|-&lt;br /&gt;
| 0xDD (221)&lt;br /&gt;
| Manufacturers (for TaxiwayParkings for example)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE (222)&lt;br /&gt;
| Jetway&lt;br /&gt;
|-&lt;br /&gt;
| 0xE7 (231)&lt;br /&gt;
| TaxiwayParking&lt;br /&gt;
|-&lt;br /&gt;
| 0xE9 (233)&lt;br /&gt;
| GroundMerging&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of COM present at the airport, runway surfaces and approach availability.&lt;br /&gt;
Each availability is coded on 1 bit: 0 = No, 1 = Yes&lt;br /&gt;
* Bit 0 : Availability of at least one COM TOWER station&lt;br /&gt;
* Bits 1-2 : (1=At least one ASPHALT or CONCRETE runway, 2=Only WATER runway(s), 0=All other combinations)   &lt;br /&gt;
* Bits 3-4 : Unknown (0) &lt;br /&gt;
* Bit 5 : Availability for GPS approach &lt;br /&gt;
* Bit 6 : Availability for VOR approach&lt;br /&gt;
* Bit 7 : Availability for NDB approach&lt;br /&gt;
* Bit 8 : Availability for ILS approach&lt;br /&gt;
* Bit 9 : Availability for LOC approach&lt;br /&gt;
* Bit 10 : Availability for SDF approach&lt;br /&gt;
* Bit 11 : Availability for LDA approach&lt;br /&gt;
* Bit 12 : Availability for VORDME approach&lt;br /&gt;
* Bit 13 : Availability for NDBDME approach&lt;br /&gt;
* Bit 14 : Availability for RNAV approach&lt;br /&gt;
* Bit 15 : Availability for LOCBC approach&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;P3D Only&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x00A0&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* bit 0: 0=X type, 1=Y type&lt;br /&gt;
* bit 1: 0=DmeOnly true, 1=DmeOnly false&lt;br /&gt;
* bit 2-7: Unknown/Unused(0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = COASTLINE&lt;br /&gt;
:0x80 = BOUNDARY&lt;br /&gt;
:0x81 = DASHED_BOUNDARY&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) [&#039;&#039;&#039;P3D only&#039;&#039;&#039;] all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10948</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10948"/>
		<updated>2020-12-02T18:31:44Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* AIRPORT (FS2020) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36) or&lt;br /&gt;
* 37 = n&lt;br /&gt;
* 38 = ne&lt;br /&gt;
* 39 = e&lt;br /&gt;
* 40 = se&lt;br /&gt;
* 41 = s&lt;br /&gt;
* 42 = sw&lt;br /&gt;
* 43 = w&lt;br /&gt;
* 44 = nw&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: centerRed flag&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: alternatePrecision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: leadingZeroIdent&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: noThresholdEndArrows&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD_SHORT&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
* 5 = HOLD_SHORT_NO_DRAW&lt;br /&gt;
* 6 = ILS_HOLD_SHORT_NO_DRAW&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 0 = FORWARD&lt;br /&gt;
* 1 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
* 0x6 = VEHICLE&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORT (FS2020) =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0056&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00)&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Closed Airport - Mask: 0x40&amp;lt;br/&amp;gt;Star Airport - Mask : 0x01&amp;lt;br/&amp;gt;TIN Airport - Mask : 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Only Add If Replace&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;10&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Airport record is followed by subrecords, each with the same header structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Sub record size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The number of subrecords is not known but they must fit within the airport size (defined at offset 0x02 of the airport record).&lt;br /&gt;
&lt;br /&gt;
The following table lists the known (to this day) ids for the airport subrecords:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Id&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 (17)&lt;br /&gt;
| RunwayStart&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 (18)&lt;br /&gt;
| Com&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 (25)&lt;br /&gt;
| AirportName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A (26)&lt;br /&gt;
| TaxiWayPoints&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D (29)&lt;br /&gt;
| TaxiNames&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 (38)&lt;br /&gt;
| Helipad&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 (49)&lt;br /&gt;
| ApronEdgeLights&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 (51)&lt;br /&gt;
| AirportDelete&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 (64)&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 (102)&lt;br /&gt;
| Tower&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE (206)&lt;br /&gt;
| Runway&lt;br /&gt;
|-&lt;br /&gt;
| 0xCF (207)&lt;br /&gt;
| PaintedLine&lt;br /&gt;
|-&lt;br /&gt;
| 0xD3 (211)&lt;br /&gt;
| Apron&lt;br /&gt;
|-&lt;br /&gt;
| 0xD4 (212)&lt;br /&gt;
| TaxiWayPaths&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 (216)&lt;br /&gt;
| PaintedHatchedArea&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 (217)&lt;br /&gt;
| TaxiSign&lt;br /&gt;
|-&lt;br /&gt;
| 0xDD (221)&lt;br /&gt;
| Manufacturers (for TaxiwayParkings for example)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE (222)&lt;br /&gt;
| Jetway&lt;br /&gt;
|-&lt;br /&gt;
| 0xE7 (231)&lt;br /&gt;
| TaxiwayParking&lt;br /&gt;
|-&lt;br /&gt;
| 0xE9 (233)&lt;br /&gt;
| GroundMerging&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of COM present at the airport, runway surfaces and approach availability.&lt;br /&gt;
Each availability is coded on 1 bit: 0 = No, 1 = Yes&lt;br /&gt;
* Bit 0 : Availability of at least one COM TOWER station&lt;br /&gt;
* Bits 1-2 : (1=At least one ASPHALT or CONCRETE runway, 2=Only WATER runway(s), 0=All other combinations)   &lt;br /&gt;
* Bits 3-4 : Unknown (0) &lt;br /&gt;
* Bit 5 : Availability for GPS approach &lt;br /&gt;
* Bit 6 : Availability for VOR approach&lt;br /&gt;
* Bit 7 : Availability for NDB approach&lt;br /&gt;
* Bit 8 : Availability for ILS approach&lt;br /&gt;
* Bit 9 : Availability for LOC approach&lt;br /&gt;
* Bit 10 : Availability for SDF approach&lt;br /&gt;
* Bit 11 : Availability for LDA approach&lt;br /&gt;
* Bit 12 : Availability for VORDME approach&lt;br /&gt;
* Bit 13 : Availability for NDBDME approach&lt;br /&gt;
* Bit 14 : Availability for RNAV approach&lt;br /&gt;
* Bit 15 : Availability for LOCBC approach&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;P3D Only&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x00A0&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* bit 0: 0=X type, 1=Y type&lt;br /&gt;
* bit 1: 0=DmeOnly true, 1=DmeOnly false&lt;br /&gt;
* bit 2-7: Unknown/Unused(0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = COASTLINE&lt;br /&gt;
:0x80 = BOUNDARY&lt;br /&gt;
:0x81 = DASHED_BOUNDARY&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) [&#039;&#039;&#039;P3D only&#039;&#039;&#039;] all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10947</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10947"/>
		<updated>2020-12-02T18:09:05Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* AIRPORTSUMMARY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08 (all FS versions from FS9 to P3Dv4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36) or&lt;br /&gt;
* 37 = n&lt;br /&gt;
* 38 = ne&lt;br /&gt;
* 39 = e&lt;br /&gt;
* 40 = se&lt;br /&gt;
* 41 = s&lt;br /&gt;
* 42 = sw&lt;br /&gt;
* 43 = w&lt;br /&gt;
* 44 = nw&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: centerRed flag&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: alternatePrecision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: leadingZeroIdent&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: noThresholdEndArrows&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD_SHORT&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
* 5 = HOLD_SHORT_NO_DRAW&lt;br /&gt;
* 6 = ILS_HOLD_SHORT_NO_DRAW&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 0 = FORWARD&lt;br /&gt;
* 1 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
* 0x6 = VEHICLE&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORT (FS2020) =&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of COM present at the airport, runway surfaces and approach availability.&lt;br /&gt;
Each availability is coded on 1 bit: 0 = No, 1 = Yes&lt;br /&gt;
* Bit 0 : Availability of at least one COM TOWER station&lt;br /&gt;
* Bits 1-2 : (1=At least one ASPHALT or CONCRETE runway, 2=Only WATER runway(s), 0=All other combinations)   &lt;br /&gt;
* Bits 3-4 : Unknown (0) &lt;br /&gt;
* Bit 5 : Availability for GPS approach &lt;br /&gt;
* Bit 6 : Availability for VOR approach&lt;br /&gt;
* Bit 7 : Availability for NDB approach&lt;br /&gt;
* Bit 8 : Availability for ILS approach&lt;br /&gt;
* Bit 9 : Availability for LOC approach&lt;br /&gt;
* Bit 10 : Availability for SDF approach&lt;br /&gt;
* Bit 11 : Availability for LDA approach&lt;br /&gt;
* Bit 12 : Availability for VORDME approach&lt;br /&gt;
* Bit 13 : Availability for NDBDME approach&lt;br /&gt;
* Bit 14 : Availability for RNAV approach&lt;br /&gt;
* Bit 15 : Availability for LOCBC approach&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;P3D Only&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x00A0&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* bit 0: 0=X type, 1=Y type&lt;br /&gt;
* bit 1: 0=DmeOnly true, 1=DmeOnly false&lt;br /&gt;
* bit 2-7: Unknown/Unused(0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = COASTLINE&lt;br /&gt;
:0x80 = BOUNDARY&lt;br /&gt;
:0x81 = DASHED_BOUNDARY&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) [&#039;&#039;&#039;P3D only&#039;&#039;&#039;] all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10534</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10534"/>
		<updated>2018-02-06T02:46:06Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* INDEXES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;P3D Only&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) [&#039;&#039;&#039;P3D only&#039;&#039;&#039;] all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10533</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10533"/>
		<updated>2018-02-06T02:44:59Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;P3D Only&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10532</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10532"/>
		<updated>2018-02-06T02:43:39Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D = true&lt;br /&gt;
}}&lt;br /&gt;
P3D Only&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10531</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10531"/>
		<updated>2018-02-06T02:41:57Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
P3D Only&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10530</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10530"/>
		<updated>2018-02-06T02:41:24Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* [[#TACAN|Tacan]] = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10529</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10529"/>
		<updated>2018-02-06T02:40:32Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10528</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10528"/>
		<updated>2018-02-06T02:39:34Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
The TACAN record has a 63 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|-&lt;br /&gt;
| 0x27&lt;br /&gt;
| &amp;lt;center&amp;gt;24&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown sub-record with an Id of 0x16&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10527</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10527"/>
		<updated>2018-02-06T02:36:30Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* NDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
The TACAN record has a 39 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. They have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10526</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10526"/>
		<updated>2018-02-06T02:36:07Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
The TACAN record has a 39 bytes long fixed section and a name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10525</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10525"/>
		<updated>2018-02-06T02:34:51Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TACAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Channel&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0000 X type&lt;br /&gt;
* 0x0001 Y Type&lt;br /&gt;
* 0x0002 DME only&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x23&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10524</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10524"/>
		<updated>2018-02-06T02:25:43Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* ILS/VOR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= TACAN =&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10523</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10523"/>
		<updated>2018-02-06T02:25:01Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* [[#INDEXES|TacanIndex]] = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10522</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10522"/>
		<updated>2018-02-06T02:23:31Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* INDEXES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* TacanIndex = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29), WayPointIcaoindex (0x2A) and TacanIndex (0xA1) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10521</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10521"/>
		<updated>2018-02-06T02:22:52Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* Tacan = 0xA0&lt;br /&gt;
* TacanIndex = 0xA1&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
*NIGHT: 0x1000&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
This is exposed as a signed int through resample, but is cast to a float representation in the BGL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10447</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10447"/>
		<updated>2017-01-06T15:19:34Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TRQ1 Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08(16bytes)/0x0C(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C(16bytes)/0x10(20bytes)&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
! Cell Size&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
| WORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| DWORD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
| BYTE&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
| WORD&lt;br /&gt;
| Each value is a mask indicating what kind of terrain the cell contains.&lt;br /&gt;
*0x0001  TerrainVectorDb&lt;br /&gt;
*0x0002  TerrainPhotoXXX&lt;br /&gt;
*0x0004  TerrainElevation&lt;br /&gt;
*0x0008  TerrainLandClass&lt;br /&gt;
*0x0010  TerrainWaterClass&lt;br /&gt;
*0x0020  TerrainRegion&lt;br /&gt;
*0x0080  PopulationDensity&lt;br /&gt;
*0x0100  AutogenAnnotation&lt;br /&gt;
*0x0200  TerrainIndex&lt;br /&gt;
*0x0400  TerrainSeasonXXX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10427</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10427"/>
		<updated>2016-12-20T00:40:31Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10426</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10426"/>
		<updated>2016-12-20T00:39:33Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
internal List&amp;lt;byte&amp;gt; Decompress(byte[] record, int outputSize, TerrainMatrixParam matrixParams)&lt;br /&gt;
{&lt;br /&gt;
   var nbRows = matrixParams.NbRows;&lt;br /&gt;
   var nbColumns = matrixParams.NbColumns;&lt;br /&gt;
   var targetIndex = 0;&lt;br /&gt;
&lt;br /&gt;
   _sourceBuffer = record;&lt;br /&gt;
   _sourceIndex = 0;&lt;br /&gt;
   _nbRead = 0;&lt;br /&gt;
   _nbBitsNotProcessed = 0;&lt;br /&gt;
   _outputBuffer = new byte[outputSize];&lt;br /&gt;
&lt;br /&gt;
   if (null == record || 0 == record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   _nbRemainingBits = 8 * record.Length;&lt;br /&gt;
   _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBytesForInitialAddValue;&lt;br /&gt;
   var b = getNext_N_SourceBits(8, out nbBytesForInitialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbShifts;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8, out nbShifts);&lt;br /&gt;
&lt;br /&gt;
   Int32 initialAddValue;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(8 * nbBytesForInitialAddValue, out initialAddValue);&lt;br /&gt;
&lt;br /&gt;
   Int32 nbBitsToGetPerData;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsToGetPerData);&lt;br /&gt;
&lt;br /&gt;
   Int32 maxBitsPerValueRead;&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   if (maxBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      maxBitsPerValueRead = 16;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   var nbRowsPerRowIteration = nbRows / 4;&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbColumns/4;&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumns;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsForLastColumnIteration = (nbColumns % 4);&lt;br /&gt;
   var nbRowsForLastRowIteration = (nbRows % 4);&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      var nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         var copyCountPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            // Last Column Iteration&lt;br /&gt;
            copyCountPerRow += nbColumnsForLastColumnIteration ;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(targetIndex + columnIteration * (nbColumns / 4), nbColumns, initialAddValue, &lt;br /&gt;
                                         nbBitsToGetPerData, copyCountPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
      }&lt;br /&gt;
      targetIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbBitsNotProcessed != 8)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRead++;&lt;br /&gt;
   }&lt;br /&gt;
   if (_nbRead != record.Length)&lt;br /&gt;
   {&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   return _outputBuffer.ToList();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool populateDecompressedBuffer(int startRowCopyIndex, int nbColumnsPerRow, int addValue, int nbBitsToGetPerData, int nbBytesToOutputPerRow, int nbRowsToProcess, int nbShifts, int maxBitsPerValueRead)&lt;br /&gt;
{&lt;br /&gt;
   int copyData, nbBitsPerValueRead;&lt;br /&gt;
&lt;br /&gt;
   // Read copyData&lt;br /&gt;
   var b = getNext_N_SourceBits(Math.Min(nbBitsToGetPerData, 8), out copyData);&lt;br /&gt;
&lt;br /&gt;
   // Read nbBitsPerValueRead&lt;br /&gt;
   // if 0, will copy value as is&lt;br /&gt;
   b &amp;amp;= getNext_N_SourceBits(4, out nbBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
   var nbAdditionalShift = (nbBitsToGetPerData &amp;lt;= 8) ? 0 : nbBitsToGetPerData - 8;&lt;br /&gt;
&lt;br /&gt;
   var valueToCopy = (copyData &amp;lt;&amp;lt; ((nbShifts + nbAdditionalShift) &amp;amp; 0xFF)) + addValue;&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsPerValueRead == 0)&lt;br /&gt;
   {&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      // Identical value to be repeated&lt;br /&gt;
      //-------------------------------&lt;br /&gt;
      targetSetIdenticalValue(startRowCopyIndex, (byte)valueToCopy, nbRowsToProcess, nbColumnsPerRow, nbBytesToOutputPerRow);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // Copy will handle only blocks 8 x 8 otherwise recursive call&lt;br /&gt;
   if (nbBytesToOutputPerRow &amp;lt; 8 || nbRowsToProcess &amp;lt; 8)&lt;br /&gt;
   {&lt;br /&gt;
      if (nbBitsPerValueRead &amp;gt; maxBitsPerValueRead)&lt;br /&gt;
      {&lt;br /&gt;
         nbBitsPerValueRead = maxBitsPerValueRead;&lt;br /&gt;
      }&lt;br /&gt;
      //-------------------&lt;br /&gt;
      // Values Read And Set&lt;br /&gt;
      //-------------------&lt;br /&gt;
      b &amp;amp;= targetReadAndSetValue(startRowCopyIndex, nbRowsToProcess,nbColumnsPerRow, nbBytesToOutputPerRow, valueToCopy, nbBitsPerValueRead, nbShifts);&lt;br /&gt;
      return b;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   // RECURSIVE CALL for a square 4 times smaller&lt;br /&gt;
   //--------------------------------------------&lt;br /&gt;
   var nbRowsPerRowIteration = nbRowsToProcess / 4;&lt;br /&gt;
   var nbRowsForLastRowIteration = nbRowsToProcess % 4; &lt;br /&gt;
&lt;br /&gt;
   var bytesInterval = nbRowsPerRowIteration * nbColumnsPerRow;&lt;br /&gt;
&lt;br /&gt;
   var nbColumnsPerColumnIteration = nbBytesToOutputPerRow / 4;&lt;br /&gt;
   var nbColumnsForLastColumnIteration = nbBytesToOutputPerRow % 4;&lt;br /&gt;
&lt;br /&gt;
   for (var rowIteration = 0; rowIteration &amp;lt; 4; rowIteration++)&lt;br /&gt;
   {&lt;br /&gt;
      nbRowsToProcess = nbRowsPerRowIteration;&lt;br /&gt;
      if (rowIteration == 3)&lt;br /&gt;
      {&lt;br /&gt;
         // Last row iteration&lt;br /&gt;
         nbRowsToProcess += nbRowsForLastRowIteration;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var rowStartIndex = startRowCopyIndex;&lt;br /&gt;
      for (var columnIteration = 0; columnIteration &amp;lt; 4; columnIteration++)&lt;br /&gt;
      {&lt;br /&gt;
         nbBytesToOutputPerRow = nbColumnsPerColumnIteration;&lt;br /&gt;
         if (columnIteration == 3)&lt;br /&gt;
         {&lt;br /&gt;
            nbBytesToOutputPerRow += nbColumnsForLastColumnIteration;&lt;br /&gt;
         }&lt;br /&gt;
         b &amp;amp;= populateDecompressedBuffer(rowStartIndex, nbColumnsPerRow, valueToCopy, nbBitsPerValueRead, &lt;br /&gt;
                                         nbBytesToOutputPerRow, nbRowsToProcess, nbShifts, maxBitsPerValueRead);&lt;br /&gt;
&lt;br /&gt;
         rowStartIndex += nbColumnsPerColumnIteration;     // Next row&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      startRowCopyIndex += bytesInterval;&lt;br /&gt;
   }&lt;br /&gt;
   return b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void targetSetIdenticalValue(int startRowCopyIndex, byte valueToCopy, int nbRowsToProcess, int nbColumnsPerRow, int nbRepeatPerRow)&lt;br /&gt;
{&lt;br /&gt;
   if (nbRepeatPerRow &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      var srclist = new List&amp;lt;byte&amp;gt;(nbRepeatPerRow);&lt;br /&gt;
      srclist.AddRange(Enumerable.Repeat(valueToCopy, nbRepeatPerRow));&lt;br /&gt;
      var srcArray = srclist.ToArray();&lt;br /&gt;
      while (nbRowsToProcess &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
         // copy &amp;lt;valueToCopy&amp;gt; &amp;lt;cnt&amp;gt; times starting at the current position (current row)&lt;br /&gt;
         Buffer.BlockCopy(srcArray, 0, _outputBuffer, startRowCopyIndex, nbRepeatPerRow);&lt;br /&gt;
&lt;br /&gt;
         nbRowsToProcess--;&lt;br /&gt;
         startRowCopyIndex += nbColumnsPerRow;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool targetReadAndSetValue(int startRowCopyIndex, int nbRowsToProcess, int nbColumnsPerRow, int nbBytesToOutputPerRow, int addValue, int nbBitsPerRead, int nbShiftsLeft)&lt;br /&gt;
{&lt;br /&gt;
   // nbBitsPerRead = nb bits per value to read&lt;br /&gt;
   // nbShiftsLeft = number of times to shift the read value to the left before adding the &amp;lt;addValue&amp;gt;&lt;br /&gt;
   if (nbRowsToProcess &amp;lt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   for (var i = 0; i &amp;lt; nbRowsToProcess; i++, startRowCopyIndex += nbColumnsPerRow)&lt;br /&gt;
   {&lt;br /&gt;
      for (var j = 0; j &amp;lt; nbBytesToOutputPerRow; j++)&lt;br /&gt;
      {&lt;br /&gt;
         Int32 srcValue;&lt;br /&gt;
         if (false == getNext_N_SourceBits (nbBitsPerRead, out srcValue))&lt;br /&gt;
         {&lt;br /&gt;
            return false;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         var byteValue = (byte)(((srcValue &amp;lt;&amp;lt; nbShiftsLeft) + addValue) &amp;amp; 0xFF);&lt;br /&gt;
&lt;br /&gt;
         // copy AL to output buffer&lt;br /&gt;
         _outputBuffer[startRowCopyIndex + j] = byteValue;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private bool getNext_N_SourceBits(int nbBitsToGet, out Int32 retValue)&lt;br /&gt;
{&lt;br /&gt;
   // Read always the LSB bits first&lt;br /&gt;
   retValue = 0;&lt;br /&gt;
&lt;br /&gt;
   if (_nbRemainingBits &amp;lt; nbBitsToGet)&lt;br /&gt;
   {&lt;br /&gt;
      return false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (nbBitsToGet &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      _nbRemainingBits -= nbBitsToGet;&lt;br /&gt;
&lt;br /&gt;
      var nbRightShift = 8 - _nbBitsNotProcessed;&lt;br /&gt;
&lt;br /&gt;
      if (_nbBitsNotProcessed &amp;lt;= nbBitsToGet)&lt;br /&gt;
      {&lt;br /&gt;
         retValue = _sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift;&lt;br /&gt;
&lt;br /&gt;
         nbRightShift = _nbBitsNotProcessed; // keep for later&lt;br /&gt;
         _sourceIndex++;&lt;br /&gt;
         _nbRead++;&lt;br /&gt;
&lt;br /&gt;
         var nbBitsStillToGet = nbBitsToGet - _nbBitsNotProcessed;&lt;br /&gt;
         _nbBitsNotProcessed = 8;&lt;br /&gt;
&lt;br /&gt;
         if (nbBitsStillToGet &amp;lt;= 0)&lt;br /&gt;
         {&lt;br /&gt;
            return true;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
         while (nbBitsStillToGet &amp;gt; 0)&lt;br /&gt;
         {&lt;br /&gt;
            var sourceByteValue = _sourceBuffer[_sourceIndex];&lt;br /&gt;
&lt;br /&gt;
            if (nbBitsStillToGet &amp;lt; 8)&lt;br /&gt;
            {&lt;br /&gt;
               retValue |= ((sourceByteValue &amp;amp; (1 &amp;lt;&amp;lt; nbBitsStillToGet) - 1) &amp;lt;&amp;lt; nbRightShift);&lt;br /&gt;
               _nbBitsNotProcessed -= nbBitsStillToGet;&lt;br /&gt;
               return true;&lt;br /&gt;
            }&lt;br /&gt;
            sourceByteValue &amp;gt;&amp;gt;= nbRightShift;&lt;br /&gt;
            retValue |= sourceByteValue;&lt;br /&gt;
            _sourceIndex++;&lt;br /&gt;
            _nbRead++;&lt;br /&gt;
            nbBitsStillToGet -= _nbBitsNotProcessed; // ESI = nbBitsStillToGet ?&lt;br /&gt;
            nbRightShift += _nbBitsNotProcessed;&lt;br /&gt;
            _nbBitsNotProcessed = 8;&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
      retValue = (_sourceBuffer[_sourceIndex] &amp;gt;&amp;gt; nbRightShift) &amp;amp; ((1 &amp;lt;&amp;lt; nbBitsToGet) - 1);&lt;br /&gt;
      _nbBitsNotProcessed -= nbBitsToGet;&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10425</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10425"/>
		<updated>2016-12-20T00:34:20Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foreach (rowpart)    /* 4 times */&lt;br /&gt;
{&lt;br /&gt;
    foreach (columnpart)   /* 4 times */&lt;br /&gt;
    {&lt;br /&gt;
        populateDecompressedBuffer(rowPart,columnPart,parameters)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
This piece of code may be called recursively (each time, the matrix being subdivided into 16 smaller parts) until a correct size (&amp;lt;= 8) is reached.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
See C# code below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10424</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10424"/>
		<updated>2016-12-20T00:29:00Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
* the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
* the columns are divided by 4 (same as above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10423</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10423"/>
		<updated>2016-12-20T00:26:44Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
Note : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At this point (3 + nbBytesForInitialAddValue) have been read.&lt;br /&gt;
Then the matrix, as defined in the [[#TRQ1 Record|TRQ1 Record]] is divided in 16 parts:&lt;br /&gt;
the rows are divided by 4. If the number of rows is not a multiple a 4, the last part is the biggest (for example, 257 will give 64,64,64 and 65).&lt;br /&gt;
the columns are divided by 4 (same as above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10422</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10422"/>
		<updated>2016-12-20T00:23:14Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See [[#Bitpack Decompression Algorithm|decompression algorithm]] in Annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
Note : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10421</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10421"/>
		<updated>2016-12-20T00:22:05Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ2 (LZ78) Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitpack Decompression Algorithm ==&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
Note : Bits are read from the LSB to the MSB of the byte (from right to left)&lt;br /&gt;
&lt;br /&gt;
First, 5 values are read. These values are the parameters of the decompression algorithm:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Size in bits &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBytesForInitialAddValue&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbShifts&lt;br /&gt;
| 8 (1 byte)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| initialAddValue&lt;br /&gt;
| 8 x nbBytesForInitialAddValue  (nbBytesForInitialAddValue bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| nbBitsToGetPerData&lt;br /&gt;
| 4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| maxBitsPerValueRead&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10420</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10420"/>
		<updated>2016-12-20T00:14:03Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Bitpack Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size (&amp;lt;= 8) is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10419</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10419"/>
		<updated>2016-12-20T00:13:00Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TRQ1 Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms works on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identifier&lt;br /&gt;
! Section Type&lt;br /&gt;
! Matrix Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| TERRAIN_PHOTO&lt;br /&gt;
| 256 x 256&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TERRAIN_ELEVATION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TERRAIN_LAND_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TERRAIN_WATER_CLASS&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TERRAIN_REGION&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TERRAIN_SEASON_XXX&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| POPULATION_DENSITY&lt;br /&gt;
| 257 x 257&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| TERRAIN INDEX&lt;br /&gt;
| 32 x 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10418</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10418"/>
		<updated>2016-12-20T00:03:19Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TRQ1 Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The decompression algorithms work on a square matrix covering each QMID square. The size of each matrix depends on the identifier defined at offset 8, as shown in the table below:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10417</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10417"/>
		<updated>2016-12-20T00:01:17Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ2 (LZ78) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== Bitpack Compressed Segment ====&lt;br /&gt;
The decompression algorithm is a recursive one. It divides the original matrix until a sufficient size is reached and then applies the decompression to the smaller matrix.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10416</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10416"/>
		<updated>2016-12-19T23:59:15Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Delta Compressed Segment ====&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10415</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10415"/>
		<updated>2016-12-19T23:58:59Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ1 (LZ77) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ1 (LZ77) Compressed Segment ====&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10414</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10414"/>
		<updated>2016-12-19T23:58:40Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ2 (LZ78) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
==== LZ2 (LZ78) Compressed Segment ====&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10413</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10413"/>
		<updated>2016-12-19T23:58:06Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* RCS1 Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10412</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10412"/>
		<updated>2016-12-19T23:57:23Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ2 (LZ78) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10411</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10411"/>
		<updated>2016-12-19T23:56:48Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ1 (LZ77) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10410</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10410"/>
		<updated>2016-12-19T23:56:31Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|decompression algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10409</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10409"/>
		<updated>2016-12-19T23:55:57Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* TRQ1 Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
&lt;br /&gt;
Note that when a double compression is involved (for example, Delta_And_LZ2_Compressed), you have to decompress in the reverse order (For example, decompress LZ2 and then Delta)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10408</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10408"/>
		<updated>2016-12-19T23:54:32Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ2 (LZ78) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
See [[#LZ2 (LZ78) Decompression Algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10407</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10407"/>
		<updated>2016-12-19T23:53:47Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ1 (LZ77) Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== LZ2 (LZ78) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10406</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10406"/>
		<updated>2016-12-19T23:53:26Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ1 (LZ77) Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LZ1 (LZ77) Decompression Algorithm ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10405</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10405"/>
		<updated>2016-12-19T23:52:39Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* LZ1 (LZ77) Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
See [[#LZ1 (LZ77) Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Decompression Algorithm ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10404</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10404"/>
		<updated>2016-12-19T23:51:49Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Decompression Algorithm ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10403</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10403"/>
		<updated>2016-12-19T23:50:28Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
See [[#Delta Decompression Algorithm|algorithm]] in annexe A.&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10402</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10402"/>
		<updated>2016-12-19T23:48:30Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
A C# implementation of this algorithm is given below:&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10401</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10401"/>
		<updated>2016-12-19T23:48:08Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Annex A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
A C# implementation of this algorithm is given below:&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10400</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10400"/>
		<updated>2016-12-19T23:47:54Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Annexe A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
A C# implementation of this algorithm is given below:&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annex A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10399</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10399"/>
		<updated>2016-12-19T23:45:34Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Decompression Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
A C# implementation of this algorithm is given below:&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
public List&amp;lt;byte&amp;gt; DeltaDecompress(byte[] source, int destinationSize)&lt;br /&gt;
{&lt;br /&gt;
    var output = new List&amp;lt;byte&amp;gt;();&lt;br /&gt;
    var sourceIndex = 0;&lt;br /&gt;
&lt;br /&gt;
    if ((destinationSize % 2) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        // Destination size is odd&lt;br /&gt;
        output.Add(source[0]);&lt;br /&gt;
        sourceIndex++;&lt;br /&gt;
        destinationSize--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (destinationSize &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        var curSourceValue = BitConverter.ToUInt16(source, sourceIndex);    // Read WORD from source buffer&lt;br /&gt;
        &lt;br /&gt;
        // Copy WORD to destination buffer&lt;br /&gt;
        output.Add(source[sourceIndex]);&lt;br /&gt;
        output.Add(source[sourceIndex + 1]);    &lt;br /&gt;
        sourceIndex += 2;&lt;br /&gt;
&lt;br /&gt;
        var cnt = (destinationSize &amp;gt;&amp;gt; 1) - 1;&lt;br /&gt;
        if (cnt != 0)&lt;br /&gt;
        {&lt;br /&gt;
            for (;;)&lt;br /&gt;
            {&lt;br /&gt;
                UInt16 addedValue;&lt;br /&gt;
                if (source[sourceIndex] == 0x80)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = BitConverter.ToUInt16(source, sourceIndex + 1);&lt;br /&gt;
                    sourceIndex += 3;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x81)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue - source[sourceIndex + 1] - 0x7E);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else if (source[sourceIndex] == 0x82)&lt;br /&gt;
                {&lt;br /&gt;
                    addedValue = (UInt16) (curSourceValue + source[sourceIndex + 1] + 0x80);&lt;br /&gt;
                    sourceIndex += 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (source[sourceIndex] &amp;gt; 0x7F)&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + (UInt16)(source[sourceIndex] + 0xFF00));    &lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        addedValue = (UInt16)(curSourceValue + source[sourceIndex]);    &lt;br /&gt;
                    }&lt;br /&gt;
                    sourceIndex++;&lt;br /&gt;
                }&lt;br /&gt;
                output.AddRange(BitConverter.GetBytes(addedValue));&lt;br /&gt;
&lt;br /&gt;
                curSourceValue = addedValue;&lt;br /&gt;
                cnt--;&lt;br /&gt;
&lt;br /&gt;
                if (0 == cnt)&lt;br /&gt;
                {&lt;br /&gt;
                    return output;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return output ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10398</id>
		<title>BGL File Format</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=BGL_File_Format&amp;diff=10398"/>
		<updated>2016-12-19T23:45:04Z</updated>

		<summary type="html">&lt;p&gt;Patrick Germain: /* Delta Compressed Segment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Ambox-Content-WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox-Applicable-FSVersion&lt;br /&gt;
| P3D2 = true&lt;br /&gt;
| P3D = true&lt;br /&gt;
| FSXI = unknown&lt;br /&gt;
| FSXA = true&lt;br /&gt;
| FSX = true&lt;br /&gt;
| FS2004 = unknown&lt;br /&gt;
| FS2002 = unknown&lt;br /&gt;
| FS2000 = unknown&lt;br /&gt;
| FS98 = unknown&lt;br /&gt;
| XP10 = unknown&lt;br /&gt;
| XP9 = unknown &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
The information contained in this wiki comes from different sources:&lt;br /&gt;
* &amp;quot;FSX File structure&amp;quot; by &#039;&#039;&#039;Winfried Orthmann&#039;&#039;&#039;&lt;br /&gt;
:This is the first document about BGL file format. It describes the generic format of a BGL file and the content of some important sections like Airport, Scenery Objects,etc.&lt;br /&gt;
* &amp;quot;FS9 FSX_BGL_Format.doc&amp;quot; by &#039;&#039;&#039;Jon Masterson&#039;&#039;&#039; (a.k.a. [http://www.fsdeveloper.com/forum/members/scruffyduck.851 ScruffyDuck])&lt;br /&gt;
* Some reverse engineering work on the TmfViewer and BglComp applications by [http://www.fsdeveloper.com/forum/members/patrick-germain.14030 &#039;&#039;&#039;Patrick Germain&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BGL Common Format =&lt;br /&gt;
All BGL files share the same generic format. A BGL file is made of a header, sections, subsections and subsection data. Subsections are children of sections. The sections are here to help us locate the subsections in the file. Data specific information is contained in the subsections data and their format is dependent on the section type.&lt;br /&gt;
&amp;lt;br/&amp;gt;A BGL file is really a big container where all kind of information can be stored (in the subsection).The meaning of the data contained in the subsections is known only by the application using it. Th only contraint is for the file to comply to the generic format described below.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;A BGL file always start with a header (Size = 0x38 bytes), followed by a list of section pointers. The number of section pointers is defined in the header.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Cvx_BGLFormat.png]]&lt;br /&gt;
&lt;br /&gt;
== File Header ==&lt;br /&gt;
The header consists of 0x38 (56) bytes. It contains the number of sections defined in the file as well as the bounding geographical coordinates of the covered squared area.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #1 – Must be 0x01, 0x02, 0x92, 0x19&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Header size : 0x38&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwLowDateTime of the FILETIME structure.&amp;lt;br/&amp;gt;Date and Time the file was created&amp;lt;br/&amp;gt;&lt;br /&gt;
The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601&amp;lt;br/&amp;gt;&lt;br /&gt;
See [http://support.microsoft.com/kb/188768 Working with the FILETIME Structure].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| dwHighDateTime of the FILETIME structure&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Magic Number #2 – Must be 0x03, 0x18, 0x05, 0x08&amp;lt;br/&amp;gt;Maybe to identify the FS version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| The number of sections following this header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 32&lt;br /&gt;
| Array[8] of unsigned integers (DWORD).&lt;br /&gt;
Each value derives from a QMID(l,u,v). See [[#Getting QMID from DWORD values| the algorithm]] in Annexe A to retrieve l,u,v values from these dwords. In that case, the second DWORD needed by the algorithm is zero.&amp;lt;br/&amp;gt;&lt;br /&gt;
The QMIDs (up to 8) define the area covered in this BGL file.&amp;lt;br/&amp;gt;&lt;br /&gt;
Even if 8 slots are provided, it is not necessary to have all 8 values filled. The list stops at the first null (0x00000000) value.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also get the upper-left corner and lower-right corner coordinates of each QMID using [[#Computing the bounding coordinates from a DWORD value|Computing the bounding coordinates from a DWORD value]].&amp;lt;br/&amp;gt;&lt;br /&gt;
To get the bounding coordinates of the area covered by the file, just keep the minimal and maximal values from each bounding coordinates.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
See also [[#How are the header QMIDs computed?| How are the header QMIDs computed?]] in Annexe A.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 02 92 19&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #1&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;pre&amp;gt;38 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;pre&amp;gt;EF 82 DF E2&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Low = 3806298863&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 C7 C6 01&amp;lt;/pre&amp;gt;&lt;br /&gt;
| High = 29804520&amp;lt;br/&amp;gt; =&amp;gt; February 27, 2007&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 18 15 08&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Magic Number #2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 section following this header&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;pre&amp;gt;E8 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=30, l=8) , using 0x000207E8 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;pre&amp;gt;E9 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 47.8125&amp;lt;br/&amp;gt;MinLongitude(Deg) = - 73.125&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=30, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;pre&amp;gt;EA 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -75.0&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -73.125&lt;br /&gt;
QMID (u=56, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;pre&amp;gt;EB 07 02 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| MinLatitude(Deg) = 45.0&amp;lt;br/&amp;gt;MaxLatitude(Deg) = 46.40625&amp;lt;br/&amp;gt;MinLongitude(Deg) = -73.124&amp;lt;br/&amp;gt;MaxLongitude(Deg) = -71.25&lt;br /&gt;
QMID (u=57, v=31, l=8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You’ll notice that only 4 subareas are defined (on a possibility of 8) and the last 4 available slots are empty (Value = 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
So the bounding coordinates of the area covered by cvx2815.bgl are:&amp;lt;br/&amp;gt;&lt;br /&gt;
:MinLatitude(Deg) = 45.0&lt;br /&gt;
:MaxLatitude(Deg) = 47.8125&lt;br /&gt;
:MinLongitude(Deg) = -75.0&lt;br /&gt;
:MaxLongitude(Deg) = -71.25&lt;br /&gt;
&lt;br /&gt;
== Sections ==&lt;br /&gt;
Following the header, at offset 0x38, there are as many sections as defined at offset 0x14 of the header. A same file may contain sections of different type. Each section has a size of 20 bytes and has the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Section type (as defined by Microsoft Flight Simulator): one of the following values:&amp;lt;br/&amp;gt;&lt;br /&gt;
* None = 0x0&lt;br /&gt;
* Copyright = 0x1&lt;br /&gt;
* Guid = 0x2&lt;br /&gt;
* [[#AIRPORT|Airport]] = 0x3&lt;br /&gt;
* [[#ILS/VOR|Ils/Vor]] = 0x13&lt;br /&gt;
* [[#NDB|Ndb]] = 0x17&lt;br /&gt;
* [[#MARKER|Marker]] = 0x18&lt;br /&gt;
* [[#BOUNDARY|Boundary]] = 0x20&lt;br /&gt;
* [[#WayPoint|Waypoint]] = 0x22&lt;br /&gt;
* [[#GEOPOL|Geopol]] = 0x23&lt;br /&gt;
* [[#SCENERYOBJECT|SceneryObject]] = 0x25&lt;br /&gt;
* [[#NAMELIST|NameList]] = 0x27&lt;br /&gt;
* [[#INDEXES|VorIlsIcaoIndex]] = 0x28&lt;br /&gt;
* [[#INDEXES|NdbIcaoIndex]] = 0x29&lt;br /&gt;
* [[#INDEXES|WaypointIcaoIndex]] = 0x2A&lt;br /&gt;
* [[#MODEL DATA|ModelData]] = 02B&lt;br /&gt;
* [[#AIRPORTSUMMARY|AirportSummary]] = 0x2C&lt;br /&gt;
* [[#EXCLUSIONRECTANGLE|Exclusion]] = 0x2E&lt;br /&gt;
* TimeZone = 0x2F&lt;br /&gt;
* [[#TERRAIN_VECTOR_DB|TerrainVectorDb]] = 0x65&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainElevation]] = 0x67&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainLandClass]] = 0x68&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainWaterClass]] = 0x69&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainRegion]] = 0x6A&lt;br /&gt;
* [[#TERRAIN SECTIONS|PopulationDensity]] = 0x6C&lt;br /&gt;
* AutogenAnnotation = 0x6D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainIndex]] = 0x6E&lt;br /&gt;
* TerrainTextureLookup = 0x6F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJan]] = 0x78&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonFeb]] = 0x79&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMar]] = 0x7A&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonApr]] = 0x7B&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonMay]] = 0x7C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJun]] = 0x7D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonJul]] = 0x7E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonAug]] = 0x7F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonSep]] = 0x80&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonOct]] = 0x81&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonNov]] = 0x82&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainSeasonDec]] = 0x83&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJan]] = 0x8C&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoFeb]] = 0x8D&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMar]] = 0x8E&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoApr]] = 0x8F&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoMay]] = 0x90&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJun]] = 0x91&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoJul]] = 0x92&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoAug]] = 0x93&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoSep]] = 0x94&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoOct]] = 0x95&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNov]] = 0x96&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoDec]] = 0x97&lt;br /&gt;
* [[#TERRAIN SECTIONS|TerrainPhotoNight]] = 0x98&lt;br /&gt;
* FakeTypes = 0x2710&lt;br /&gt;
* IcaoRunway = 0x2711&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Value used to compute the size of each subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;subSection Size = ((value &amp;amp; 0x10000) | 0x40000) &amp;gt;&amp;gt; 0x0E&amp;lt;/pre&amp;gt;&lt;br /&gt;
Most subsections have a size of 16 bytes. However, subsections for TerrainSeasonXXXX have a size of 20 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of subsections in the section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Total Size (in bytes) of all the subsections. This value should be equal to : nbSubSections x (size computed at offset 0x04)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For example, in CVX2815.bgl, the only one section, at offset 0x38, has this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;pre&amp;gt;65 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| TerrainVectorDb = 101 = 0x65&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 1 =&amp;gt; subsection size = 16&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;pre&amp;gt;8D 07 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x078D = 1933 subsections in the section&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 CD 1F 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x1FCD01 = File offset = position in the file where the first subsection starts.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;pre&amp;gt;D0 78 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size (in bytes) =0x78D0 = 30928 bytes = 16 * 1933&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subsections ==&lt;br /&gt;
A subsection contains information about the geographical area it covers. If also contains the file offset of the subsection’s data. All subsections of a same section are contiguous meaning that they are following each other in the file.&lt;br /&gt;
&amp;lt;br/&amp;gt;A subsection has a size of 16 bytes, except for the following sections that have a size of 20 bytes&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&amp;lt;br/&amp;gt;The subsection has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword A. See this [[#Getting QMID from DWORD values|algorithm]] to retrieve the QMID values.&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that all subsections inside a section are sorted on this value, meaning that subsections with the lowest QMID level (bigger squares) are followed by subsections with higher QMID levels (smaller squares).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| QMID Dword B - This field is present only for subsections having a size of 20 bytes)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of records contained in the subsection&#039;s data.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is 0 for TerrainVectorDb.&amp;lt;br/&amp;gt;&lt;br /&gt;
For &#039;&#039;&#039;NameList&#039;&#039;&#039;, there is only one record. This value is actually the number of ICAO entries defined in the record data.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The interpretation of the section data depends on the section type. &lt;br /&gt;
=== Example ===&lt;br /&gt;
In CVX2815.bgl:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1FCD01&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD05&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of records = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD09&lt;br /&gt;
| &amp;lt;pre&amp;gt;4C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0x4C = File Offset = Position in the file of the subsection’s data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FCD0D&lt;br /&gt;
| &amp;lt;pre&amp;gt;DD 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Size of the subsection’s data = 0xDD = 221 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= AIRPORT =&lt;br /&gt;
Each airport record consists of a fixed part with the length of 0x38 bytes, followed by a variable&lt;br /&gt;
part with 0..n subrecords of different types. The structure of the fixed part is as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the airport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of RUNWAY subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of COM subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of START subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of APPROACH subrecords (?)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bit 0-6 : Number of aprons (?)&amp;lt;br/&amp;gt;Bit 7: flag for deleteAirport record&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of HELIPAD subrecords&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Longitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Latitude (if present)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Tower Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET5&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| INT(Traffic Scalar * 255) - FSX only&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (always 0x00) - FSX only&lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can be present after the main airport record:&lt;br /&gt;
== Name ==&lt;br /&gt;
This subrecord seems to be present in every airport record, and is usually the first one immediately after the fixed part. However a DELETE subsection may precede the Name subsection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the Name subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| AirportName (padded with NUL (0x000 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Included Tower Scenery Object ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0066 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the subrecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the included scenery object&lt;br /&gt;
|}&lt;br /&gt;
After this record we find an included scenery object with an internal structure identical to that of&lt;br /&gt;
other scenery objects (see below) and including possible attachments. The BglComp compiler&lt;br /&gt;
allows only one scenery object to be included at this point, but in some FS X scenery files we find&lt;br /&gt;
more than one objects included here. If present, the subrecords of this type appear immediately&lt;br /&gt;
after the Name subrecord.&lt;br /&gt;
&lt;br /&gt;
== Runway ==&lt;br /&gt;
The runway subrecord consists of a fixed part with a length of 0x34 bytes and a variable number of&lt;br /&gt;
sub-subrecords. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0004 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the runway subrecord&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of surface:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0000 CONCRETE&lt;br /&gt;
* 0x0001 GRASS&lt;br /&gt;
* 0x0002 WATER&lt;br /&gt;
* 0x0004 ASPHALT&lt;br /&gt;
* 0x0007 CLAY&lt;br /&gt;
* 0x0008 SNOW&lt;br /&gt;
* 0x0009 ICE&lt;br /&gt;
* 0x000C DIRT&lt;br /&gt;
* 0x000D CORAL&lt;br /&gt;
* 0x000E GRAVEL &lt;br /&gt;
* 0x000F OIL_TREATED&lt;br /&gt;
* 0x0010 STEEL_MATS&lt;br /&gt;
* 0x0011 BITUMINOUS&lt;br /&gt;
* 0x0012 BRICK&lt;br /&gt;
* 0x0013 MACADAM&lt;br /&gt;
* 0x0014 PLANKS&lt;br /&gt;
* 0x0015 SAND&lt;br /&gt;
* 0x0016 SHALE&lt;br /&gt;
* 0x0017 TARMAC&lt;br /&gt;
* 0x00FE UNKNOWN&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway number (01 - 36)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Primary runway designator:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = NONE&lt;br /&gt;
* 1 = LEFT&lt;br /&gt;
* 2 = RIGHT&lt;br /&gt;
* 3 = CENTER&lt;br /&gt;
* 4 = WATER&lt;br /&gt;
* 5 = A&lt;br /&gt;
* 6 = B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Secondary runway designator&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for primary ILS ([[#ICAO Identifiers and region codes|Special Format]]), 0x0000 if none.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident. for seconday ILS ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (Deg)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pattern Altitude (in meters)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Marking flags:&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: edges&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: dashes&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6: precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 7: edgePavement&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 8: singleEnd&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 9: primaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 10: secondaryClosed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 11: primaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 12: secondaryStol&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 13: alternate threshold&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 14: alternate fixedDistance&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 15: alternate touchdown&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 21: alternate precision&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 22: leading zero Ident&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 23: noThresholdEndArrows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Lights flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0-1: edge&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0 = None&lt;br /&gt;
* 1 = Low&lt;br /&gt;
* 2 = Medium&lt;br /&gt;
* 3 = High&lt;br /&gt;
BIT 2-3: center (as with edge)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: flag for centerRed&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Pattern flags: &amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 0: primaryTakeoff (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 1: primaryLanding (0 = YES)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 2: primaryPattern (0 = LEFT)&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 3: secondaryTakeoff&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 4: secondaryLanding&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 5: secondaryPattern&amp;lt;br/&amp;gt;&lt;br /&gt;
BIT 6-7: unused (?)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
The following sub-subreports can be present within a runway subrecord:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
=== OffsetThreshold ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0005 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0006 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BlastPad ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0007 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0008 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Overrun ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0009 &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Surface (same as in runway)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width in meters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vasi ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
Id Primary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Left (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Id Secondary Right (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x01 = VASI21 &lt;br /&gt;
* 0x02 = VASI31 &lt;br /&gt;
* 0x03 = VASI22 &lt;br /&gt;
* 0x04 = VASI32 &lt;br /&gt;
* 0x05 = VASI23 &lt;br /&gt;
* 0x06 = VASI33 &lt;br /&gt;
* 0x07 = PAPI2 &lt;br /&gt;
* 0x08 = PAPI4 &lt;br /&gt;
* 0x09 = TRICOLOR &lt;br /&gt;
* 0x0a = PVASI &lt;br /&gt;
* 0x0b = TVASI &lt;br /&gt;
* 0x0c = BALL &lt;br /&gt;
* 0x0d = APAP/PANELS &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Spacing&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Approach Lights ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Primary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
Id Secondary (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0010&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of sub-subrecord (0x08)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Bits [0-5]: System&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = ODALS &lt;br /&gt;
* 0x02 = MALSF &lt;br /&gt;
* 0x03 = MALSR &lt;br /&gt;
* 0x04 = SSALF &lt;br /&gt;
* 0x05 = SSALR &lt;br /&gt;
* 0x06 = ALSF1 &lt;br /&gt;
* 0x07 = ALSF2 &lt;br /&gt;
* 0x08 = RAIL &lt;br /&gt;
* 0x09 = CALVERT &lt;br /&gt;
* 0x0a = CALVERT2 &lt;br /&gt;
* 0x0b = MALS &lt;br /&gt;
* 0x0c = SALS &lt;br /&gt;
* 0x0e = SSALS&amp;lt;br/&amp;gt; &lt;br /&gt;
Bit 5: Endlights (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 6: Reil (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
Bit 7: Touchdown (0 = false, 1 = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of strobes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Helipad ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0026&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x24)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in Runway)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0 = NONE &lt;br /&gt;
* 1 = H &lt;br /&gt;
* 2 = SQUARE &lt;br /&gt;
* 3 = CIRCLE &lt;br /&gt;
* 4 = MEDICAL&lt;br /&gt;
bit 4: transparent&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 5: closed &amp;lt;br/&amp;gt;&lt;br /&gt;
bit 6-7: unused&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| color (cannot be set with bglcomp because of error kin compiler)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Start ==&lt;br /&gt;
(the keywords “Start” and “RunwayStart” produce identical subrecords)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0011&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway Designator (as with runway subrecord)&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Start Type&lt;br /&gt;
* 1 = RUNWAY&lt;br /&gt;
* 2 = WATER&lt;br /&gt;
* 2 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Com ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0012&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type. The following numbers have been identified:&amp;lt;br/&amp;gt;&lt;br /&gt;
* 0x0001 ATIS &lt;br /&gt;
* 0x0002 MULTICOM &lt;br /&gt;
* 0x0003 UNICOM &lt;br /&gt;
* 0x0004 CTAF &lt;br /&gt;
* 0x0005 GROUND &lt;br /&gt;
* 0x0006 TOWER&lt;br /&gt;
* 0x0007 CLEARANCE &lt;br /&gt;
* 0x0008 APPROACH &lt;br /&gt;
* 0x0009 DEPARTURE &lt;br /&gt;
* 0x000A CENTER &lt;br /&gt;
* 0x000B FSS &lt;br /&gt;
* 0x000C AWOS &lt;br /&gt;
* 0x000D ASOS &lt;br /&gt;
* 0x000E CLEARANCE_PRE_TAXI&lt;br /&gt;
* 0x000F REMOTE_CLEARANCE_DELIVERY&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency x 1000000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;Variable&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name. Maximum Length = 48 (0x30)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delete Airport ==&lt;br /&gt;
The DeleteAirport subrecord has a fixed and a variable part. The fixed part has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0033&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of subrecord: variable&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| delete flags&lt;br /&gt;
* BIT 0: allApproaches &lt;br /&gt;
* BIT 1: allApronLights&lt;br /&gt;
: Note: in the bglcomp.xsd this keyword is written allApronlights, but the compiler accepts only allApronLights.&lt;br /&gt;
: You have to edit bglcomp.xsd, if you want to use this feature.&lt;br /&gt;
* BIT 2: allAprons &lt;br /&gt;
* BIT 3: allFrequencies &lt;br /&gt;
* BIT 4: allHelipads &lt;br /&gt;
* BIT 5: allRunways &lt;br /&gt;
* BIT 6: allStarts &lt;br /&gt;
* BIT 7: allTaxiways&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual runways to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual starts to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of individual frequencies to delete&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
according to the number of individual features to delete there are the following parts of the record added:&lt;br /&gt;
=== for Runways ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface (as in runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number primary&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number secondary&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Runway designator primary&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 4-7: Runway designator secondary&lt;br /&gt;
|}&lt;br /&gt;
=== for Starts ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway number&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway designator&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type of start&lt;br /&gt;
* 1 = RUNWAY, &lt;br /&gt;
* 2 = WATER, &lt;br /&gt;
* 3 = HELIPAD&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unused (?)&lt;br /&gt;
|}&lt;br /&gt;
=== for Frequencies ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 28-31: type (as with COM records)&amp;lt;br/&amp;gt;bit 0-27: frequency * 1000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron ==&lt;br /&gt;
There are 2 subrecords for each apron which follow each other. Both have variable length.&lt;br /&gt;
&amp;lt;br/&amp;gt;First record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0037&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| zero-fill to next DWORD boundary&lt;br /&gt;
|}&lt;br /&gt;
Second record&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0030&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| surface (as with runway subrecord)&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| flags:&lt;br /&gt;
* bit 0: drawSurface &lt;br /&gt;
* bit 1: drawDetail &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles to draw&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each triangle to draw:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of first point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of second point&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of third point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Apron Edge Lights ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0031&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of edges&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| 0xFF0000FF: Unknown, probably color of lights &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x3F800000: Unknown (value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| 0x44480000: Unknown (value 800)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each edge&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Unknown (value 60.96)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of start vertex&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of end vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Point ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway points present&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each taxipoint:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NORMAL&lt;br /&gt;
* 2 = HOLD&lt;br /&gt;
* 4 = ILS_HOLD_SHORT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Flag&lt;br /&gt;
* 1 = FORWARD&lt;br /&gt;
* 2 = REVERSE&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Parking ==&lt;br /&gt;
This record type has a short fixed part for all TaxiwayParking records together and a longer variable part with sections for each TaxiwayParking. The fixed part is 8 bytes long:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway parking records present&lt;br /&gt;
|}&lt;br /&gt;
The record sections for each TaxiwayParking are again of variable length, depending on the number of airlineCodes present:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 31-24: count of airlineCodes present&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 23-12: number&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-8: type&lt;br /&gt;
* 0x1 = RAMP_GA &lt;br /&gt;
* 0x2 = RAMP_GA_SMALL &lt;br /&gt;
* 0x3 = RAMP_GA_MEDIUM &lt;br /&gt;
* 0x4 = RAMP_GA_LARGE &lt;br /&gt;
* 0x5 = RAMP_CARGO &lt;br /&gt;
* 0x6 = RAMP_MIL_CARGO &lt;br /&gt;
* 0x7 = RAMP_MIL_COMBAT &lt;br /&gt;
* 0x8 = GATE_SMALL &lt;br /&gt;
* 0x9 = GATE_MEDIUM &lt;br /&gt;
* 0xa = GATE_HEAVY &lt;br /&gt;
* 0xb = DOCK_GA &lt;br /&gt;
* 0xc = FUEL &lt;br /&gt;
* 0xd = VEHICLES&lt;br /&gt;
bit 7-6: pushback&lt;br /&gt;
* 00 = none&lt;br /&gt;
* 01 = left&lt;br /&gt;
* 10 = right&lt;br /&gt;
* 11 = both&lt;br /&gt;
bit 5-0: name &lt;br /&gt;
* 0x00 = NONE &lt;br /&gt;
* 0x01 = PARKING &lt;br /&gt;
* 0x02 = N_PARKING &lt;br /&gt;
* 0x03 = NE_PARKING &lt;br /&gt;
* 0x04 = E_PARKING &lt;br /&gt;
* 0x05 = SE_PARKING&lt;br /&gt;
* 0x06 = S_PARKING &lt;br /&gt;
* 0x07 = SW_PARKING &lt;br /&gt;
* 0x08 = W_PARKING &lt;br /&gt;
* 0x09 = NW_PARKING &lt;br /&gt;
* 0x0a = GATE &lt;br /&gt;
* 0x0b = DOCK &lt;br /&gt;
* 0x0c = GATE_A &lt;br /&gt;
* 0x0d = GATE_B &lt;br /&gt;
* 0x0e = GATE_C&lt;br /&gt;
* 0x0f = GATE_D&lt;br /&gt;
* 0x10 = GATE_E &lt;br /&gt;
* .. &lt;br /&gt;
* .. &lt;br /&gt;
* 0x25 = GATE_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Radius&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset1&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset3&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| teeOffset4&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Airline Designator (0..n times repeated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Taxiway Path ==&lt;br /&gt;
This record has a fixed length of 8 bytes and a variable part with records for each path. It has the  following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of paths defined&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and for each path:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| index of start point.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type TAXI, the index of the start and of the end must both refer to a TaxiPoint.&amp;lt;br/&amp;gt;&lt;br /&gt;
For type PARKING the start index must refer to a TaxiPoint, the end index must refer to a TaxiwayParking.&lt;br /&gt;
&amp;lt;br/&amp;gt;Indexes are zero-based.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-11: index of end point Bit 12-15: runway designator&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-4: Type&lt;br /&gt;
* 0x1 = TAXI&lt;br /&gt;
* 0x2 = RUNWAY&lt;br /&gt;
* 0x3 = PARKING&lt;br /&gt;
* 0x4 = PATH&lt;br /&gt;
* 0x5 = CLOSED&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 5: &amp;quot;drawSurface flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 6: &amp;quot;drawDetail flag&amp;quot; (TRUE=1)&lt;br /&gt;
&amp;lt;br&amp;gt; BIT 7: unused (?)  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| runway number / index into TaxiName&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bitfield &lt;br /&gt;
BIT 0: centerline &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 1: centerLineLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 2-3: leftEdge &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = SOLID&lt;br /&gt;
* 10 = DASHED&lt;br /&gt;
*  11 = SOLID_DASHED&lt;br /&gt;
&amp;lt;br&amp;gt;BIT 4: leftEdgeLighted &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 5-6: rightEdge &lt;br /&gt;
&amp;lt;br&amp;gt;BIT 7: rightEdgeLighted&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Surface&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Width&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Weight Limit&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TaxiName ==&lt;br /&gt;
This record has variable length, it consist of 8 bytes as a fixed part and then 8 bytes for each Name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x001D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of name entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and for each name:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Taxiname&lt;br /&gt;
|}&lt;br /&gt;
== Taxiway Sign ==&lt;br /&gt;
These records are coded in the [[#TaxiwaySign|section]] for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
I guess that for historical reasons, the TaxiwaySign fixed part looks like the LibraryObject record and that is why the records are stored in the Scenery object section.&lt;br /&gt;
&lt;br /&gt;
== Jetway ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Parking number (refers to an existing parking)&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Gate Name&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size of the scenery object data to follow (0x40)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;64&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| [[#LibraryObject|LibraryObject]] record&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Approach ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0024&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suffix&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| bit 0-3: Type &lt;br /&gt;
* 0x01 = GPS &lt;br /&gt;
* 0x02 = VOR &lt;br /&gt;
* 0x03 = NDB &lt;br /&gt;
* 0x04 = ILS &lt;br /&gt;
* 0x05 = LOCALIZER &lt;br /&gt;
* 0x06 = SDF &lt;br /&gt;
* 0x07 = LDA &lt;br /&gt;
* 0x08 = VORDME &lt;br /&gt;
* 0x09 = NDBDME &lt;br /&gt;
* 0x0a = RNAV &lt;br /&gt;
* 0x0b = LOCALIZER_BACKCOURSE &lt;br /&gt;
bit 4-6: Runway designator&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 7: gpsOverlay flag&lt;br /&gt;
|- &lt;br /&gt;
| 0x09&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of transitions (?)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of approach legs&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of missedApproach legs ?&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| fixIdent &lt;br /&gt;
BIT 0-4: fixType &lt;br /&gt;
* 02 = VOR &lt;br /&gt;
* 03 = NDB &lt;br /&gt;
* 04 =  TERMINAL_NDB &lt;br /&gt;
* 05 = WAYPOINT &lt;br /&gt;
* 06 = TERMINAL_WAYPOINT &lt;br /&gt;
* 09 = RUNWAY &lt;br /&gt;
BIT 5-31: fixIdent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;&lt;br /&gt;
bit 11-31: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| missedAltitude&lt;br /&gt;
|}&lt;br /&gt;
after this the following record can occur:&lt;br /&gt;
&lt;br /&gt;
=== ApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
each leg is a structure with a fixed length of 44 bytes&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| ID of the leg types found: &lt;br /&gt;
* 0x01 = AF&lt;br /&gt;
* 0x02 = CA&lt;br /&gt;
* 0x03 = CD&lt;br /&gt;
* 0x04 = CF &lt;br /&gt;
* 0x05 = CI &lt;br /&gt;
* 0x06 = CR &lt;br /&gt;
* 0x07 = DF &lt;br /&gt;
* 0x08 = FA &lt;br /&gt;
* 0x09 = FC &lt;br /&gt;
* 0x0a = FD &lt;br /&gt;
* 0x0b = FM &lt;br /&gt;
* 0x0c = HA &lt;br /&gt;
* 0x0d = HF &lt;br /&gt;
* 0x0e = HM&lt;br /&gt;
* 0x0f = IF&lt;br /&gt;
* 0x10 = PI&lt;br /&gt;
* 0x11 = RF&lt;br /&gt;
* 0x12 = TF&lt;br /&gt;
* 0x13 = VA&lt;br /&gt;
* 0x14 = VD&lt;br /&gt;
* 0x15 = VI&lt;br /&gt;
* 0x16 = VM&lt;br /&gt;
* 0x17 = VR&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Altitude Descriptor&lt;br /&gt;
* 01 = A&lt;br /&gt;
* 02 = +&lt;br /&gt;
* 03 = -&lt;br /&gt;
* 04 = B&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* bit 0: turnDirection = L&lt;br /&gt;
* bit 1: turnDirection = R&lt;br /&gt;
* bit 8: magneticCourse (0)* trueCourse (1) &lt;br /&gt;
* bit 9: distance (0) or time (1)&lt;br /&gt;
* bit 10: flyover false (0) true (1)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: fixIdent&amp;lt;br/&amp;gt;bit 0-4: fixType&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&amp;lt;br/&amp;gt;bit 11-32: ICAO Id of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 5-31: recommendedIdent&amp;lt;br/&amp;gt;bit 0-4: recommendedType&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Recommended region&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Theta&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Rho&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| trueCourse / magneticCourse (depending on flag)&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance / Time&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 1&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude 2&lt;br /&gt;
|}&lt;br /&gt;
=== MissedApproachLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow&lt;br /&gt;
|}&lt;br /&gt;
=== Transition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| transitionType 1 = FULL, 2 = DME&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of TransitionLegs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-4: fixType&lt;br /&gt;
* 2 = VOR &lt;br /&gt;
* 3 = NDB &lt;br /&gt;
* 4 = TERMINAL_NDB &lt;br /&gt;
* 5 = WAYPOINT &lt;br /&gt;
* 6 = TERMINAL_WAYPOINT&lt;br /&gt;
bit 5-31: fixIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: fixRegion&lt;br /&gt;
bit 11-31 : airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;If transitionType = DME and DmeArc record exists, then the following 16 bytes are present&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| dmeIndent&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: dmeRegion&lt;br /&gt;
bit 11-31: airportID of relevant airport&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Radial&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Distance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TransitionLegs ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x002F&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of legs to follow.&lt;br /&gt;
|}&lt;br /&gt;
== WayPoint ==&lt;br /&gt;
The waypoint record can be part of the Airport group or can be entered independently. In both cases the output for the BGL is the same but for the DWORD at offset 0x18.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0022&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 1 = NAMED&lt;br /&gt;
* 2 = UNNAMED&lt;br /&gt;
* 3 = VOR &lt;br /&gt;
* 4 = NDB &lt;br /&gt;
* 5 = OFF_ROUTE&lt;br /&gt;
* 6 = IAF &lt;br /&gt;
* 7 = FAF&lt;br /&gt;
|- &lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Number of Route entries to follow&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| WayPoint Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
bit 11-31: ICAO ident of the relevant airport, if it is a terminal waypoint, defined within an airport record.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Optional, if Route is given&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Route type&lt;br /&gt;
* 1 = VICTOR&lt;br /&gt;
* 2 = JET&lt;br /&gt;
* 3 = BOTH&lt;br /&gt;
|- &lt;br /&gt;
| 0x1D&lt;br /&gt;
| &amp;lt;center&amp;gt;8&amp;lt;/center&amp;gt;&lt;br /&gt;
| char[8]&lt;br /&gt;
| Name (zero padded), name cannot be longer than 8 characters&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Next:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x25&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x29&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2D&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;for Previous:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x31&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BIT 0-2: Type &lt;br /&gt;
* 1 = NDB&lt;br /&gt;
* 2 = VOR&lt;br /&gt;
* 5 = all other&lt;br /&gt;
BIT 5-31: waypointIdent ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Bit 0-10 waypointRegion ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
Bit 11-31 airportId if terminal waypoint&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Altitude Minimum&lt;br /&gt;
|}&lt;br /&gt;
Note: it is not necessary for any route to have both previous and next defined, in that case the fields for this part of the record are all zero.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Fences ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0038&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BlastFence&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0039&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; BoundaryFence&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Unknown Record 0x3B ==&lt;br /&gt;
Every (?) airport in the FS X scenery files contains a subrecord with the ID of 0x3B. This record&lt;br /&gt;
contains as usual a DWORD length field at offset 0x02.&amp;lt;br/&amp;gt;It cannot be reproduced with the BglComp&lt;br /&gt;
compiler, and it has no apparent function.&amp;lt;br/&amp;gt;&lt;br /&gt;
It concists of a long list of vertices along the perimeter of&lt;br /&gt;
the airport and a list of indices for triangles to be drawn (similar to the second Apron record), but in&lt;br /&gt;
fact the sim apparently does not use this list for drawing.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id : &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x003B&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (variable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of triangles&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each vertex:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &#039;&#039;&#039;and then for each triangle:&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #1&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #2&lt;br /&gt;
|- &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Index of vertex #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AIRPORTSUMMARY =&lt;br /&gt;
The record has a fixed size of 44 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0032&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x2C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Ident.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Length of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading of the longest runway&lt;br /&gt;
|-&lt;br /&gt;
|- valign = &amp;quot;top&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Type of fuel present at the airport and its availability.&lt;br /&gt;
Each availability is coded on 2 bits: 0 = No, 1 = Unknown, 2 = Prior Request, 3 = Yes&lt;br /&gt;
* Bits 0-1 : Availability for 73 octane &lt;br /&gt;
* Bits 2-3 : Availability for 87 octane &lt;br /&gt;
* Bits 4-5 : Availability for 100 octane &lt;br /&gt;
* Bits 6-7 : Availability for 130 octane &lt;br /&gt;
* Bits 8-9 : Availability for 145 octane &lt;br /&gt;
* Bits 10-11 : Availability for MOGAS&lt;br /&gt;
* Bits 12-13 : Availability for JET&lt;br /&gt;
* Bits 14-15 : Availability for JETA&lt;br /&gt;
* Bits 16-17 : Availability for JETA1&lt;br /&gt;
* Bits 18-19 : Availability for JETAP&lt;br /&gt;
* Bits 20-21 : Availability for JETB&lt;br /&gt;
* Bits 22-23 : Availability for JET4&lt;br /&gt;
* Bits 24-22 : Availability for JET4&lt;br /&gt;
* Bit 30 : Airport has avgas&lt;br /&gt;
* Bit 31 : Airport has jet fuel &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ILS/VOR =&lt;br /&gt;
The records for ILS and VOR are in the same section and they are identical for the fixed section. ILS records can have an additional subrecords. The fixed part is 40 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0013&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Type. The following numbers have been found:&lt;br /&gt;
* 0x0001 VOR TERMINAL&lt;br /&gt;
* 0x0002 VOR LOW&lt;br /&gt;
* 0x0003 VOR HIGH&lt;br /&gt;
* 0x0004 ILS&lt;br /&gt;
* 0x0005 VOR VOT&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE &lt;br /&gt;
| Flags. The following bits have been recognized: &lt;br /&gt;
* bit 0: if 0 then DME only, otherwise 1 for ILS &lt;br /&gt;
* bit 2: backcourse (0 = false, 1 = true)&lt;br /&gt;
* bit 3: glideslope present &lt;br /&gt;
* bit 4: DME present &lt;br /&gt;
* bit 5: NAV true&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range in meters&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10 regionId&lt;br /&gt;
bit 11-31 airportId (for ILS) &lt;br /&gt;
|}&lt;br /&gt;
The following subrecords can follow:&lt;br /&gt;
== Localizer ==&lt;br /&gt;
(For ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id Localizer (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0014&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Runway Designator (0=NONE, 1=LEFT, 2=RIGHT, 3=CENTER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading (True,°)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Loc Beam width (°)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GlideSlope ==&lt;br /&gt;
For (ILS)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id GlideSlope (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0015&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Pitch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dme ==&lt;br /&gt;
For (ILS/VOR)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id DME(&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0016&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|}&lt;br /&gt;
After these subsections, a name subsection is added:&lt;br /&gt;
&lt;br /&gt;
== Name ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name (max. 48 characters)&lt;br /&gt;
|}&lt;br /&gt;
If VisualModel is added in the source file, the compiler adds another section to the file with a record of type &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0025&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt; (SceneryxObject) with the GUID for the object referenced. &lt;br /&gt;
The coordinates for this objects are taken from the ILS/VOR and adjusted, if BiasXYZ is added to the VisualModel.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NDB =&lt;br /&gt;
The NDB records are stored in a separate section. The have a 40 bytes long fixed section and a&lt;br /&gt;
name section of variable length. The fixed section has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0017&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = COMPASS_POINT&lt;br /&gt;
* 1 = MH&lt;br /&gt;
* 2 = H&lt;br /&gt;
* 3 = HH&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Frequency&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Elevation x 1000 (in meters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Range&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Magnetic Variation&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| bit 0-10: region &lt;br /&gt;
bit 11-31: ICAO id of airport, if it was defined with an airport (terminal NDB)&lt;br /&gt;
|}&lt;br /&gt;
The name subsection has the following structure&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0019&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SCENERYOBJECT =&lt;br /&gt;
== TaxiwaySign ==&lt;br /&gt;
These records are coded in the section for scenery objects (0x25) with a separate type of entry. Apparently all Taxiway signs for one airport are coded together on one record. There seems to be no coordination of this record with the airport record to which it belongs!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000E&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&amp;lt;br/&amp;gt;0x05 for FS9&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude (?) cannot be coded with the compiler&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags (cannot be coded)&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank(?)]] - Cannot be coded&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading(?)]] - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity (?) - Cannot be coded&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|- &lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of taxiway signs for this airport&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each sign:&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Longitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Longitude - Anchor Longitude) * 40075000 * cos ((pi/180) * abs (Anchor Latitude + LatOffset /2) / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Latitude offset from anchor value in fix part above&lt;br /&gt;
Value = (TaxiSign Latitude - Anchor Latitude) * 40007000 / 360&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Size&lt;br /&gt;
* 1 = SIZE1&lt;br /&gt;
* 2 = SIZE2&lt;br /&gt;
* 3 = SIZE3&lt;br /&gt;
* 4 = SIZE4&lt;br /&gt;
* 5 = SIZE5&lt;br /&gt;
|- &lt;br /&gt;
| 0x0B&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Justification (1 = right, 2 = left)&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Label (zero filled to next WORD address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LibraryObject ==&lt;br /&gt;
The record has a fixed length of 0x40 bytes with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000B&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
(0x02 for FS9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0040)&lt;br /&gt;
(0x0030 for FS9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
* Bit 0: IsAboveAGL&lt;br /&gt;
* Bit 1: NoAutogenSuppression&lt;br /&gt;
* Bit 2: NoCrash&lt;br /&gt;
* Bit 3: NoFog&lt;br /&gt;
* Bit 4: NoShadow&lt;br /&gt;
* Bit 5: NoZWrite&lt;br /&gt;
* Bit 6: NoZTest&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| FSX only: contains an empty GUID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|}&lt;br /&gt;
If an &amp;lt;b&amp;gt;AttachedObject&amp;lt;/b&amp;gt; exists, there are 3 other records following:&lt;br /&gt;
=== AttachedObject === &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1002&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0004)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 2nd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ID depending on the kind of attached object. &lt;br /&gt;
It is possible to attach beacons, effects and other library objects&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Offset of attach point string&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasX&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasY&lt;br /&gt;
|- &lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| BiasZ&lt;br /&gt;
|- &lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Probability&lt;br /&gt;
|- &lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Randomness&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 0xF5 = CIVILIAN AIRPORT&lt;br /&gt;
* 0xF6 = CIVILIAN HELIPORT&lt;br /&gt;
* 0xF7 = CIVILIAN SEA_BASE&lt;br /&gt;
* 0xF8 = MILITARY AIRPORT&lt;br /&gt;
* 0xF9 = MILITARY HELIPORT&lt;br /&gt;
* 0xFA = MILITARY SEA_BASE&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown, always 0x01 (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| unknown , always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &lt;br /&gt;
| STRINGZ&lt;br /&gt;
| Name of the attachment point&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then the 3rd record&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x1001&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x004)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effect ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000D&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| ImageComplexity &lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE &lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE &lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;80&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectName&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRINGZ&lt;br /&gt;
| effectParams&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenericBuilding ==&lt;br /&gt;
NB.: BuildingBias is not implemented in the compiler.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x000A&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: 1 = isAboveAGL&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
* 0 = VERYSPARSE &lt;br /&gt;
* 1 = SPARSE&lt;br /&gt;
* 2 = NORMAL &lt;br /&gt;
* 3 = DENSE&lt;br /&gt;
* 4 = VERYDENSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| type: 0x00a0 generic building&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size fo record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| subtype. The following numbers have been identified:&lt;br /&gt;
* 0x0004 rectangular with roofType FLAT&lt;br /&gt;
* 0x0006 rectangular with roofType RIDGE&lt;br /&gt;
* 0x0007 rectangular with roofType PEAKED&lt;br /&gt;
* 0x0008 rectangular with roofType SLANT&lt;br /&gt;
* 0x0009 pyramidal building&lt;br /&gt;
* 0x000a multisidedBuilding&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all rectangular buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| SizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture(6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY(7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX(8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY(9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ(10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (17)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | end for rectangular buildings with rooftype FLAT.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType RIDGE or SLANTED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableY (19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| gableTexture (20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexGableZ (21)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for roofType SLANTED only:&lt;br /&gt;
|-&lt;br /&gt;
| 0x52&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| faceTexture (22)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (23)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexFaceX (24)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for rectangular buildings with roofType PEAKED:&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY(18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for multisided buildings:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| buildingSides&lt;br /&gt;
: Note: The Argument for smoothing is required by the compiler, but it has no effect on the BGL-file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeRoofY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofY (16)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | Note: textureIndexRoofY is required by the compiler, but it has no effect on the bgl file !&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for pyramidal buildings:&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeX (0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeZ (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopX (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopZ (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bottomTexture (4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeBottomY (5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomX (6)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexBottomZ (7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| windowTexture (8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeWindowY (9)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowX (10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowY (11)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexWindowZ (12)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| topTexture (13)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| sizeTopY (14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopX (15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexTopZ (16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| roofTexture (17)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofX (18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| textureIndexRoofZ (19)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | for all&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown : 0x22 0x00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windsock ==&lt;br /&gt;
Record with fixed length of 46 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0C&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x2E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flags (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| poleheight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| sockLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: blue&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: green&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor: red&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| PoleColor ? (0xFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE[4]&lt;br /&gt;
| SockColor&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| flag: lighted (TRUE = 0x0001)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extrusion Bridge ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x12&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Profile&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Material Set&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;center&amp;gt;12&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD[3]&lt;br /&gt;
| altitude sample location 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| road width&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Probability&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Suppress&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Placement Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Point count&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline object placement&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| placement id&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each polyline point&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| LONG&lt;br /&gt;
| Elevation&lt;br /&gt;
|}&lt;br /&gt;
== Trigger ==&lt;br /&gt;
The record consists of a fixed part and a variable part. The fixed part is 34 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x10&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| AltitudeIsAGL (0x0001 = TRUE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Pitch]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Bank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Pitch, bank and heading|Heading]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| imageComplexity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Instance Id&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type&lt;br /&gt;
* 0x0000 = REFUEL_REPAIR&lt;br /&gt;
* 0x0001 = WEATHER&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| triggerHeight&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;WEATHER&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type &lt;br /&gt;
* 0x0001 = RIDGE_LIFT&lt;br /&gt;
* 0x0002 = UNIDIRECTIONAL_TURBULENCE&lt;br /&gt;
: note: in bglcomp.xsd this keyword is spelled NONDIRECTIONAL_TURBULENCE, but the compiles does not understand it. If you change the keyword in bglcomp.xsd compilation is ok.&lt;br /&gt;
* 0x0003 = DIRECTIONAL_TURBULENCE&lt;br /&gt;
* 0x0004 = THERMAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Heading&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| Scalar&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;and then for each vertex:&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT&lt;br /&gt;
| BiasY&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | In case of &#039;&#039;&#039;FUEL_REPAIR&#039;&#039;&#039; the variable part has the following structure:&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Fuel type and availability&lt;br /&gt;
* bit 0-1: type 73&lt;br /&gt;
* bit 2-3: type 87&lt;br /&gt;
* bit 4-5: type 100&lt;br /&gt;
* bit 6-7: type 130&lt;br /&gt;
* bit 8-9: type 145&lt;br /&gt;
* bit 10-11: type MOGAS&lt;br /&gt;
* bit 12-13: type JET&lt;br /&gt;
* bit 14-15: type JETA&lt;br /&gt;
* bit 16-17: type JETA1&lt;br /&gt;
* bit 18-19: type JETAP&lt;br /&gt;
* bit 20-21: type JETB&lt;br /&gt;
* bit 22-23: type JET4&lt;br /&gt;
* bit 24-25: type JET5&lt;br /&gt;
* bit 26-29 : unused&lt;br /&gt;
* bit 30 : piston type&lt;br /&gt;
* bit 31 : jet type&lt;br /&gt;
for all except last two :&lt;br /&gt;
* 0 = NO&lt;br /&gt;
* 1 = UNKNOWN&lt;br /&gt;
* 2 = PRIOR_REQUEST&lt;br /&gt;
* 3 = YES&lt;br /&gt;
when type=UNKNOWN and availability = YES then type=100 and type = JETA both are set to availability=YES&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;and then for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasX&lt;br /&gt;
|-&lt;br /&gt;
| 0x036&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| FLOAT &lt;br /&gt;
| BiasZ&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MARKER = &lt;br /&gt;
The Marker record has a fixed length of 28 bytes with the following structure:&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE:  The structure given by Winfried appears to be wrong in the first three fields &lt;br /&gt;
* ID 		2 bytes 	WORD&lt;br /&gt;
* Size 		4 bytes 	DWORD&lt;br /&gt;
* Heading	1 byte		BYTE&lt;br /&gt;
&lt;br /&gt;
The structure below is taken from the source code of BGLXMl.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x18&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (0x0000001C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Heading&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type&lt;br /&gt;
* 0 = INNER&lt;br /&gt;
* 1 = MIDDLE&lt;br /&gt;
* 2 = OUTER&lt;br /&gt;
* 3 = BACKCOURSE&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Altitude&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Region ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Unknown (0x0000)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOUNDARY = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x20&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: variable&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Type &lt;br /&gt;
* 00 = NONE&lt;br /&gt;
* 01 = CENTER &lt;br /&gt;
* 02 = CLASS_A&lt;br /&gt;
* 03 = CLASS_B &lt;br /&gt;
* 04 = CLASS_C&lt;br /&gt;
* 05 = CLASS_D &lt;br /&gt;
* 06 = CLASS_E&lt;br /&gt;
* 07 = CLASS_F &lt;br /&gt;
* 08 = CLASS_G&lt;br /&gt;
* 09 = TOWER &lt;br /&gt;
* 0a = CLEARANCE&lt;br /&gt;
* 0b = GROUND &lt;br /&gt;
* 0c = DEPARTURE&lt;br /&gt;
* 0d = APPROACH &lt;br /&gt;
* 0e = MOA&lt;br /&gt;
* 0f = RESTRICTED &lt;br /&gt;
* 10 = PROHIBITED&lt;br /&gt;
* 11 = WARNING &lt;br /&gt;
* 12 = ALERT&lt;br /&gt;
* 13 = DANGER &lt;br /&gt;
* 14 = NATIONAL_PARK&lt;br /&gt;
* 15 = MODEC &lt;br /&gt;
* 16 = RADAR&lt;br /&gt;
* 17 = TRAINING&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| BIT 0-3: maximumAltitudeType&lt;br /&gt;
BIT 4-7: minimumAltitudeType&lt;br /&gt;
* 1 = MEAN_SEA_LEVEL (= UNKNOWN)&lt;br /&gt;
* 2 = ABOVE_GROUND_LEVEL&lt;br /&gt;
* 3 = UNLIMITED &lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Minimum Altitude * 1000&lt;br /&gt;
|- &lt;br /&gt;
| 0x20&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x24&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of area covered&lt;br /&gt;
|- &lt;br /&gt;
| 0x28&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Maximum Altitude&lt;br /&gt;
|- &lt;br /&gt;
| 0x32&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD &lt;br /&gt;
| Type field of name record (0x19)&lt;br /&gt;
|- &lt;br /&gt;
| 0x34&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD &lt;br /&gt;
| Size of name record&lt;br /&gt;
|- &lt;br /&gt;
| 0x36&lt;br /&gt;
| &amp;lt;center&amp;gt;size-6&amp;lt;/center&amp;gt;&lt;br /&gt;
| STRING&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
on this follows a record describing the drawing of the lines&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x21&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| size: variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of points to follow&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;for each point 10 bytes&amp;lt;/b&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;top&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Type of point&lt;br /&gt;
* 1 = START&lt;br /&gt;
* 2 = LINE&lt;br /&gt;
* 3 = ORIGIN&lt;br /&gt;
* 4 = ARC clockwise&lt;br /&gt;
* 5 = arc counter-clockwise&lt;br /&gt;
* 6 = circle&lt;br /&gt;
NB: in case of circle, the entries for minimumAltitude and maximumAltitude override&lt;br /&gt;
the values in start if both are given.&amp;lt;br/&amp;gt;&lt;br /&gt;
the start entry is in case of circle not needed at all&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: there is a bug in the new version of bglcomp.xsd: the word BoundaryStart in grpBoundaryChildren has to be replaced by Start, otherwise the compiler does not accept it!&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of point (in case of circle: unknown, = 0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of point (in case of circle: FLOAT: radius)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GEOPOL = &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x23&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size: Variable&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Bit 0-13: Number of vertices number of vertices &lt;br /&gt;
Bit 14-15: Type &lt;br /&gt;
:0x40 = BOUNDARY&lt;br /&gt;
:0x80 = COASTLINE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Minimum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Maximum [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; | &amp;lt;b&amp;gt;variable part: for each vertex&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= MODEL DATA =&lt;br /&gt;
The model data structure has a fixed length of 24 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;16&amp;lt;/center&amp;gt;&lt;br /&gt;
| GUID&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File offset from the start of this subsection&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Mdl File Length&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= EXCLUSIONRECTANGLE =&lt;br /&gt;
This record has a fixed length record of 20 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| exclusion type &lt;br /&gt;
: 0x0008 = exclude All&lt;br /&gt;
Otherwise: &lt;br /&gt;
* bit 4 = Beacon Objects&lt;br /&gt;
* bit 5 = Effect Objects&lt;br /&gt;
* bit 6 = GenericBuilding Objects&lt;br /&gt;
* bit 7 = Library Objects&lt;br /&gt;
* bit 8 = TaxiwaySign Objects&lt;br /&gt;
* bit 9 = Trigger Objects&lt;br /&gt;
* bit 10 = Windsock Objects&lt;br /&gt;
* bit 11 = ExclusionBridge Objects&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Size (unused - always 0)&lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of NW corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of SE corner&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of SE corner&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= NAMELIST =&lt;br /&gt;
The namelist contains only one record of variable length. It consists of a fixed part and a variable part. The fixed part is 42 bytes long and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- &lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Id (&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color:#0000FF&amp;quot;&amp;gt;0x0027&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;)&lt;br /&gt;
|- &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Size (?) seems always to be 0x00000000&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of region names&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of country names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0A&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of state names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of city names&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of airport names&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Number of ICAO Ident&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of region list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x16&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of country list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1A&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of state list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x1E&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of city list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x22&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of airport list (from start of record)&lt;br /&gt;
|- &lt;br /&gt;
| 0x26&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Offset of ICAO Ident list (from start of record)&lt;br /&gt;
|}&lt;br /&gt;
The lists for region, country, state, city and airport names have all the same structure:&lt;br /&gt;
an index with 1 DWORD for each entry in the list. The DWORD is an offset in the buffer of names that follows the DWORDs. Each name in that buffer is null-char terminated. Note that the offset values may not be in ascending order (see example).&amp;lt;br/&amp;gt; The ICAO list has a different structure. It contains n entries (one for each ICAO name), each of them 20 bytes long, with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Number&amp;lt;br/&amp;gt;of bytes&lt;br /&gt;
! Format&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Region name index (all indexes start with 0 for the first name in the relevant list)&lt;br /&gt;
|- &lt;br /&gt;
| 0x01&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| BYTE&lt;br /&gt;
| Country Name index&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| 0x02&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| bit 0-3 : unknown&lt;br /&gt;
bit 4-15 : state name index &lt;br /&gt;
|- &lt;br /&gt;
| 0x04&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| City Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x06&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| Airport Name index&lt;br /&gt;
|- &lt;br /&gt;
| 0x08&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| ICAO Identifier ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x0C&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| DWORD&lt;br /&gt;
| Region Ident ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- &lt;br /&gt;
| 0x10&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Longitude]] of the upper left corner of the corresponding QMID Level 9 Square.&amp;lt;br/&amp;gt;The value stored here is the same (2nd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&amp;lt;br/&amp;gt;[[File:Qmid9.png]]&amp;lt;br/&amp;gt;. The 1st value of the triplet is the level.&lt;br /&gt;
|- &lt;br /&gt;
| 0x12&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| WORD&lt;br /&gt;
| [[#Computing Longitude and Latitude from a DWORD value|Latitude]] of the upper left corner of the corresponding QMID Level 9 Square&amp;lt;br/&amp;gt;The value stored here is the same (3rd value in the triplet) that you see in the status bar of the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheTmfViewerTool TmfViewer] application when the QMID grid Level 9 is selected.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
Let&#039;s look at the file APX25230.bgl located in the (...)\Microsoft Flight Simulator X\Scenery\0302\scenery folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
The NameList record starts at offset 0x77B4.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77B4&lt;br /&gt;
| Id&lt;br /&gt;
| 0x0027&lt;br /&gt;
|-&lt;br /&gt;
| 77B6&lt;br /&gt;
| Size&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 77BA&lt;br /&gt;
| NbRegionNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BC&lt;br /&gt;
| NbCountryNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 77BE&lt;br /&gt;
| NbStateNames&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|77C0&lt;br /&gt;
|NbCityNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C2&lt;br /&gt;
|NbAirportNames&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C4&lt;br /&gt;
|NbICAOIdents&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|77C6&lt;br /&gt;
|RegionListOffset&lt;br /&gt;
|0x002A&lt;br /&gt;
|-&lt;br /&gt;
|77CA&lt;br /&gt;
|CountryListOffset&lt;br /&gt;
|0x002F&lt;br /&gt;
|-&lt;br /&gt;
|77CE&lt;br /&gt;
|StateListOffset&lt;br /&gt;
|0x0038&lt;br /&gt;
|-&lt;br /&gt;
|77D2&lt;br /&gt;
|CityListOffset&lt;br /&gt;
|0x003D&lt;br /&gt;
|-&lt;br /&gt;
|77D6&lt;br /&gt;
|AirportListOffset&lt;br /&gt;
|0x0070&lt;br /&gt;
|-&lt;br /&gt;
|77DA&lt;br /&gt;
|ICAOListOffset&lt;br /&gt;
|0x00AA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the &#039;&#039;&#039;cities&#039;&#039;&#039;. There are 3 cities defined (at per offset 0x77C0). So the cities list start at offset 0x77B4 + 0x3D = 0x77F1.&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x77F1, we find 3 DWORDs (one for each city). &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
| 77F1&lt;br /&gt;
| Offset #0&lt;br /&gt;
| 7: the first name if at offset 7 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F5&lt;br /&gt;
| Offset #1&lt;br /&gt;
| 0: the second name if at offset 0 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|-&lt;br /&gt;
| 77F9&lt;br /&gt;
| Offset #2&lt;br /&gt;
| 14: the second third if at offset 14 in the buffer that follow at offset 0x77FD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows a buffer of 38 (0x26) bytes containing the names of the cities (since the AirportList starts at 0x77B4 + 0x70 = 0x7824, we know the the buffer of cities names stops at 0x7823 so it has size of 0x26).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4D 61 72 69 65 6C 00 48 61 76 61 6E 61 00 53 61 &lt;br /&gt;
6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 &lt;br /&gt;
20 42 61 6E 6F 73&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first name starts at offset 7: &amp;lt;pre&amp;gt;48 61 76 61 6E 61 00 : Havana&amp;lt;/pre&amp;gt;&lt;br /&gt;
The second name starts at offset 0: &amp;lt;pre&amp;gt;4D 61 72 69 65 6C 00 : Mariel&amp;lt;/pre&amp;gt;&lt;br /&gt;
The third name starts at offset 14: &amp;lt;pre&amp;gt;53 61 6E 20 41 6E 74 6F 6E 69 6F 20 44 65 20 4C 6F 73 20 42 61 6E 6F 73 : San Antonio De Los Banos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the &#039;&#039;&#039;ICAO&#039;&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
The ICAO list starts at offset 0x77B4 + 0xAA = 0x785E. There are 3 ICA identifiers, so 3 consecutive records of 20 bytes. Let&#039;s look at the first ICAO record:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Offset&lt;br /&gt;
| Field&lt;br /&gt;
| Value&lt;br /&gt;
|-&lt;br /&gt;
|785E&lt;br /&gt;
|RegionNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|785F&lt;br /&gt;
|CountryNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7860&lt;br /&gt;
|StateNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7862&lt;br /&gt;
|CityNameIndex&lt;br /&gt;
|1 : Index = 1 so that is the 2nd name in the cities names list = Mariel&lt;br /&gt;
|-&lt;br /&gt;
|7864&lt;br /&gt;
|AirportNameIndex&lt;br /&gt;
|0 &lt;br /&gt;
|-&lt;br /&gt;
|7866&lt;br /&gt;
|ICAOIdent&lt;br /&gt;
|E1 0C 9A 02 =&amp;gt; MUML&lt;br /&gt;
|-&lt;br /&gt;
|786A&lt;br /&gt;
|Unknown&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
| 786E&lt;br /&gt;
| UpperLeft Longitude of the QMID&lt;br /&gt;
| 67 00 =&amp;gt; -83.4375&lt;br /&gt;
|-&lt;br /&gt;
|7870&lt;br /&gt;
|UpperLeft Latitude of the QMID&lt;br /&gt;
|5F 00 =&amp;gt; 23.203125&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN_VECTOR_DB =&lt;br /&gt;
This type of subsection contains values to retrieve geographical coordinates and types of vector data, organized as segments.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The section does not contain geographical coordinates per se but &#039;&#039;&#039;offsets&#039;&#039;&#039; to the lower left corner (minimum latitude / longitude) of the covered area (QMID Square). The covered area is also defined in the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
Not that a vector that stretches over several QMID squares is split in as many sub-vectors.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The data is organized in lists of pair values (One pair per geographical coordinate). Each pair can then be used to compute the final geographical coordinates. There are 3 ways to retrieve these lists of pairs.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The first value in a pair is longitude-related. The second value is latitude-related.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
The algorithm to compute the geographical coordinates from a pair is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void convertToCoordinates (double longitude_related_Value, double latitude_related_Value)&lt;br /&gt;
{&lt;br /&gt;
    var deltaLongFactor = (MaxLongitudeDeg - MinLongitudeDeg) / 0x8000;&lt;br /&gt;
    var deltaLatFactor = (MaxLatitudeDeg - MinLatitudeDeg) / 0x8000;&lt;br /&gt;
&lt;br /&gt;
    var LongitudeDeg = MinLongitudeDeg + (longitude_related_Value * deltaLongFactor);&lt;br /&gt;
    var LatitudeDeg = MinLongitudeDeg + (latitude_related_Value * deltaLatFactor);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsection Header ==&lt;br /&gt;
Each subsection starts with the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| 6&amp;lt;br/&amp;gt;This is the identifier for a vector subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Defines the QMID square related to this subsection (all vectors are within the square). See [[#Getting QMID from DWORD values| Getting QMID from DWORD values]]. &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ADDTOCELLS&lt;br /&gt;
When the -ADDTOCELLS flag is used with the Shp2Vec tool, this value is 1, otherwise 0&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of entities.&amp;lt;br/&amp;gt;An entity is a list of segments. (a segment is a list of points).&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes in the attributes buffer.&amp;lt;br/&amp;gt;The attributes buffer contains some GUIDs identifying the segments of this subsection.&lt;br /&gt;
Some GUID values (like the Texture) are not used by the TmfViewer application.&lt;br /&gt;
It also contains some extra bytes needed by some attributes (for example, 2 FLOAT32 values - SlopeX and SlopeY - are needed for WaterPolys).&amp;lt;br/&amp;gt;The GUID values are defined at [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Terrain And Scenery]&lt;br /&gt;
&amp;lt;br/&amp;gt;(See Vector Attributes for the Shp2Vec Tool)&lt;br /&gt;
&amp;lt;br/&amp;gt;The usable primary GUID values are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{359C73E8-06BE-4FB2-ABCB-EC942F7761D0} Airport Bounds&lt;br /&gt;
{91CB4A9B-9398-48E6-81DA-70AEA3295914} Parks&lt;br /&gt;
{EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} Water Polygons (GPS)&lt;br /&gt;
{956A42AD-EC8A-41BE-B7CB-C68B5FF1727E} Water Polygons&lt;br /&gt;
{AC39CDCB-DB78-4628-9A7C-051DA7AC864A} Exclusions&lt;br /&gt;
{0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F} Shorelines&lt;br /&gt;
{714BF912-F9DF-467E-80AE-28EB27374DBD} Streams&lt;br /&gt;
{C7ACE4AE-871D-4938-8BDC-BB29C4BBF4E3} Utilities&lt;br /&gt;
{33239EB4-D2B8-46F5-98AB-47B3D0922E2A} Railways&lt;br /&gt;
{560FA8E6-723D-407D-B730-AE08039102A5} Roads&lt;br /&gt;
{54B91ED8-BC02-41B7-8C3B-2B8449FF85EC} Freeway Traffic Roads&lt;br /&gt;
{1B6A15BB-05FB-4401-A8D1-BB520E84904C} Water Polygons Slope&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of attribute offsets used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points used in that subsection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points, in that subsection, that have a different altitude value than the altitude of their siblings in the same segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| N&lt;br /&gt;
| Attributes buffer containing &amp;lt;N&amp;gt; bytes, where N is defined at relative offset 0x10.&lt;br /&gt;
The attributes buffer contains the primary GUIDs identifying the type of vectors (Roads, RailWays, Streams,...) used in the QMID square related to this subsection, as well as secondary GUIDS (Type of park for example).&amp;lt;br/&amp;gt;&lt;br /&gt;
The GUIDs are those defined in the XML file used by the [http://msdn.microsoft.com/en-us/library/cc707102.aspx#TheShp2VecTool Shp2Vec tool].&lt;br /&gt;
The buffer is organized as this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description&lt;br /&gt;
! Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 1 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 1&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #F5F6CE; text-align: center;&amp;quot; |&#039;&#039; if additional bytes &amp;gt; 0&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | Additional Data&amp;lt;br/&amp;gt;&lt;br /&gt;
For Type Texture, the additional data is usually a GUID (ADD=16) and is one of the values defined at [http://msdn.microsoft.com/en-us/library/cc526968.aspx Vector Shape Properties GUIDs]&lt;br /&gt;
| style=&amp;quot;background: #F5F6CE&amp;quot; | ADD&lt;br /&gt;
|-&lt;br /&gt;
| Vector Type 2 GUID&lt;br /&gt;
| 16 - GUID&lt;br /&gt;
|-&lt;br /&gt;
| Nb Additional bytes (ADD) for Type 2&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attributes Buffer Example ===&lt;br /&gt;
This example is taken from the file (...)\Microsoft Flight Simulator X\Scenery\0301\scenery\cvx2815.bgl&lt;br /&gt;
At offset 0x565, we have 160 bytes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE  &lt;br /&gt;
08 00 00 00 00 00 00 00 00 00 00 00 AD 8F BC 0C  &lt;br /&gt;
73 DF A1 40 AD 2B FE 62 F8 00 4F 6F 00 00 00 00  &lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E  &lt;br /&gt;
00 00 00 00 F7 44 0C EA DE 01 10 4D 97 EB FB 55  &lt;br /&gt;
10 EB 7B 72 00 00 00 00 BB 15 6A 1B FB 05 01 44  &lt;br /&gt;
A8 D1 BB 52 0E 84 90 4C 10 00 00 00 82 C1 D5 BC  &lt;br /&gt;
8B 9C 57 4C 97 BD 27 2C F4 92 CB FF BB 15 6A 1B  &lt;br /&gt;
FB 05 01 44 A8 D1 BB 52 0E 84 90 4C 10 00 00 00  &lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
that can be interpreted as :&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0&amp;lt;br/&amp;gt;&lt;br /&gt;
86 7D B0 CE 05 36 BE 44 B4 8A 97 F8 D0 1B 74 DE : GUID for Water Polygons Slope {CEB07D86-3605-44BE-B48A-97F8D01B74DE}&amp;lt;br/&amp;gt;&lt;br /&gt;
08 00 00 00 : 8 bytes of additionnal data (for slopeX and slopeY)&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeX = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : slopeY = 0 &amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x1C:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 8F BC 0C 73 DF A1 40 AD 2B FE 62 F8 00 4F 6F : GUID for Shorelines {0CBC8FAD-DF73-40A1-AD2B-FE62F8004F6F}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x30:&amp;lt;br/&amp;gt;&lt;br /&gt;
AD 42 6A 95 8A EC BE 41 B7 CB C6 8B 5F F1 72 7E : GUID for Water Polygons {956A42AD-EC8A-41BE-B7CB-C68B5FF1727E}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x44:&amp;lt;br/&amp;gt;&lt;br /&gt;
F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 : GUID for Water Polygons - GPS {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72}&amp;lt;br/&amp;gt;&lt;br /&gt;
00 00 00 00 : No additional data&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x58:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
82 C1 D5 BC 8B 9C 57 4C 97 BD 27 2C F4 92 CB FF : GUID for Hydro_Polygons_Generic_Lake_Perennial {BCD5C182-9C8B-4C57-97BD-272CF492CBFF}&amp;lt;br/&amp;gt;&lt;br /&gt;
At offset 0x7C:&amp;lt;br/&amp;gt;&lt;br /&gt;
BB 15 6A 1B FB 05 01 44 A8 D1 BB 52 0E 84 90 4C : GUID Texture {1B6A15BB-05FB-4401-A8D1-BB520E84904C}&amp;lt;br/&amp;gt;&lt;br /&gt;
10 00 00 00 : 16 bytes of additional data &amp;lt;br/&amp;gt;&lt;br /&gt;
D8 29 32 7B ED 18 4D 4F AE 22 12 66 08 62 AB A1 : GUID for Shorelines_Generic_Lake {7B3229D8-18ED-4F4D-AE22-12660862ABA1}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Entity Structure ==&lt;br /&gt;
Then for each entity (the number of entities is defined at relative offset 0x0C of the subsection header (see [[#Subsection Header|Subsection Header]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of segments in the entity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Segment type:&lt;br /&gt;
* 1 – Points only&lt;br /&gt;
* 2 – Lines&lt;br /&gt;
* 3 - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Number of signatures offsets (Must be &amp;lt; 0x64).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 4 * N - DWORD[N]&lt;br /&gt;
| N = Number of signatures offsets (see above).&amp;lt;br/&amp;gt;Will contain the offsets into the signature buffer.&lt;br /&gt;
For example, 2 signatures offsets may be defined here: one for a park and the second for the texture used for this park.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Segment Structure ==&lt;br /&gt;
Then for each segment (the number of segments is defined at relative offset 0x00 of the entity structure (see [[#Entity Structure|Entity Structure]] above), we have the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of points (geographical coordinates) in this segment.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Altitude Information Flag&lt;br /&gt;
* 0 – No altitude information&lt;br /&gt;
* 1 – The points have different altitudes&lt;br /&gt;
* 2 – All points have the same altitude&lt;br /&gt;
If 1 or 2 there will be additional bytes after the data buffer.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Method used to build the pairs list from the data buffer.&amp;lt;br/&amp;gt;Possible values are 1,2 or 3&lt;br /&gt;
* 1 – Method1&lt;br /&gt;
* 2 – Method2&lt;br /&gt;
* 3 – Method3  &lt;br /&gt;
&amp;lt;br/&amp;gt;Note: I did not find a cvx file with a value of 3 but it looks like Method3 read the pairs list directly from the data buffer without any extra processing.&lt;br /&gt;
&amp;lt;br/&amp;gt;Methods 1 and 2 need some extra processing. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| &lt;br /&gt;
| Data buffer – Size may vary depending on the method used. See below.&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| -&lt;br /&gt;
| 4 x N - FLOAT[N]&lt;br /&gt;
| N depends on the Altitude Information Flag defined at relative offset 0x04.&lt;br /&gt;
* If 0 then N = 0 (no bytes)&lt;br /&gt;
* If 1 then N = NumberOfPoints (as defined at relative offset 0x00). Each FLOAT is the altitude (in meters) of the corresponding point.&lt;br /&gt;
* If 2 then N = 1 then this is the altitude (in meters) common to all points.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
[[File:Cvx_SectionStructure.png]]&lt;br /&gt;
=== Method 1 ===&lt;br /&gt;
By far the most complex method. I have some code for it. But I still have to figure out the big picture.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Longitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| First Latitude Data - First value in the list of pairs.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LongitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| LatitudeData Increment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Number of bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| N&lt;br /&gt;
| N is the number of bytes defined above at relative offset 0x10.&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Method 2 ===&lt;br /&gt;
The data buffer for this method has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Root Mask&lt;br /&gt;
|-&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| N&lt;br /&gt;
| N is computed using the value of the Root Mask.&amp;lt;br/&amp;gt;N = (RootMask * NbPoints * 2 + 7) &amp;gt;&amp;gt; 3&amp;lt;br/&amp;gt;where&lt;br /&gt;
* &#039;&#039;RootMask&#039;&#039; is defined at relative offset 0x00 of this structure.&lt;br /&gt;
* &#039;&#039;NbPoints&#039;&#039; is the number of points as defined at relative offset 0x00 of the Segment Structure.&lt;br /&gt;
&amp;lt;br/&amp;gt;These N bytes are the raw data used to build the final list of pairs.&lt;br /&gt;
|}&lt;br /&gt;
==== Algorithm ====&lt;br /&gt;
The algorithm used by Method2 to build the list of pairs is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Fills an array listOfValues of DWORD &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
PositionInPair = 0;   /* 0 = first value in pair, 1 = second value in pair */&lt;br /&gt;
PairIndex = 0 ;&lt;br /&gt;
ShiftValue = 0 ;&lt;br /&gt;
NbBytesLeftToRead = ((rootMask * nbPoints) * 2 + 7) &amp;gt;&amp;gt; 3;&lt;br /&gt;
Mask = 1 &amp;lt;&amp;lt; rootMask ;    /* 2 ^ rootMask */&lt;br /&gt;
&lt;br /&gt;
/* Read first value */&lt;br /&gt;
if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (4 bytes)&lt;br /&gt;
    NbBytesLeftToRead -= 4 ;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
    NbBytesLeftToRead = 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (PairIndex &amp;lt; nbPoints)&lt;br /&gt;
{&lt;br /&gt;
    if (ShiftValue &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Left */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;lt;&amp;lt; (-ShiftValue)) &amp;amp; Mask);&lt;br /&gt;
&lt;br /&gt;
        /* Add to existing pair value */&lt;br /&gt;
        result += listOfValues[PairIndex * 2 + PositionInPair];        &lt;br /&gt;
&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* Shift Right */&lt;br /&gt;
        result = (uint)((valueFromFile &amp;gt;&amp;gt; ShiftValue) &amp;amp; Mask);&lt;br /&gt;
        listOfValues[PairIndex * 2 + PositionInPair] = result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (rootMask + ShiftValue &amp;gt;= 32)&lt;br /&gt;
    {&lt;br /&gt;
        if (NbBytesLeftToRead &amp;gt; 3)&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (4 bytes)&lt;br /&gt;
            NbBytesLeftToRead -= 4 ;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            valueFromFile = read (NbBytesLeftToRead bytes)&lt;br /&gt;
            NbBytesLeftToRead = 0 ;&lt;br /&gt;
        }&lt;br /&gt;
        ShiftValue -= 32;    /* now negative */&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        /* continue processing value from file */&lt;br /&gt;
        ShiftValue += rootMask;&lt;br /&gt;
        PositionInPair++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (PositionInPair == 2)&lt;br /&gt;
    {&lt;br /&gt;
        PairIndex++;    /* Next entry in the list of pair values */&lt;br /&gt;
        PositionInPair = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Still with the same example as in Subsections, we know that the first subsection data starts at offset 0x4C (as described in the first subsection starting  at offset 0x1FCD01) . So at this file offset, we have the subsection header of the first subsection data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| &amp;lt;pre&amp;gt;06 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 FA 81 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Bounding coordinates:&lt;br /&gt;
* MinLatitude(Deg) = 47.63671875&lt;br /&gt;
* MaxLatitude(Deg) = 47.8125&lt;br /&gt;
* MinLongitude(Deg) =- 75.0&lt;br /&gt;
* MaxLongitude(Deg) = -74.765625&lt;br /&gt;
QMID (u=448, v=240, l=11) , using 0x0081FA00 as A and 0 as B in [[#Getting QMID from DWORD values| this algorithm]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; AddToCells = False&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of entities = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| &amp;lt;pre&amp;gt;14 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of bytes in the signatures buffer = 20&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of attribute offsets used in that subsection = 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| &amp;lt;pre&amp;gt;1C 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of pair values in that subsection = 28&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| &lt;br /&gt;
| Signatures buffer containing 20 bytes.&amp;lt;pre&amp;gt;F7 44 0C EA DE 01 10 4D 97 EB FB 55 10 EB 7B 72 00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is GUID {EA0C44F7-01DE-4D10-97EB-FB5510EB7B72} = Water Polygons (GPS), followed by 4 zeroes.&lt;br /&gt;
|}&lt;br /&gt;
Then follows 3 entities.&amp;lt;br/&amp;gt;The first entity (at offset 0x80 of the file) is &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of segments in the entity = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| &amp;lt;pre&amp;gt;03 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Segment type = 3  - Polygons&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| &amp;lt;pre&amp;gt;01 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of signatures offsets = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| &amp;lt;pre&amp;gt;00 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Signatures offset = 0: points to the only one GUID&lt;br /&gt;
|}&lt;br /&gt;
This entity is followed by only one segment, at offset 0x8E of the file&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| &amp;lt;pre&amp;gt;0E 00 00 00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Number of points = 14&lt;br /&gt;
|-&lt;br /&gt;
| 0x92&lt;br /&gt;
| &amp;lt;pre&amp;gt;00&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 0 =&amp;gt; No Altitude information&lt;br /&gt;
|-&lt;br /&gt;
| 0x93&lt;br /&gt;
| &amp;lt;pre&amp;gt;02&amp;lt;/pre&amp;gt;&lt;br /&gt;
| 2 – Method2&lt;br /&gt;
|-&lt;br /&gt;
| 0x94&lt;br /&gt;
| &amp;lt;pre&amp;gt;0F&amp;lt;/pre&amp;gt;&lt;br /&gt;
| Root Mask = 0x0F&amp;lt;br/&amp;gt;So N = (15 * 14* 2 + 7) &amp;gt;&amp;gt; 3 = 53&amp;lt;br/&amp;gt;53 bytes to follow.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95&lt;br /&gt;
| &lt;br /&gt;
| 53 bytes:&amp;lt;pre&amp;gt;&lt;br /&gt;
84 3E 56 37&lt;br /&gt;
65 10 74 1D&lt;br /&gt;
3C 44 5B 9F&lt;br /&gt;
11 C5 D0 05&lt;br /&gt;
C9 2C F3 D5&lt;br /&gt;
B2 3A 8D 8A&lt;br /&gt;
8D 9D 9B 67&lt;br /&gt;
8B ED 52 59&lt;br /&gt;
B3 BC 0B 36&lt;br /&gt;
35 5F 54 25&lt;br /&gt;
B5 33 30 6D&lt;br /&gt;
E2 64 4B EB&lt;br /&gt;
36 A1 8F D5&lt;br /&gt;
0D&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The next entity starts at file offset 0xCA.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;So the algorithm for method 2 goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mask = 0x7FFF ; &lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 53 ; shiftValue = 0; PairIndex = 0 ; PositionInPair = 0&lt;br /&gt;
   valueFromFile = read (4 bytes) = 0x37563E84&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x3E84&lt;br /&gt;
   listOfValues[0] = 0x3E84&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x0F; PairIndex = 0 ; PositionInPair = 1&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6EAC&lt;br /&gt;
   listOfValues[1] = 0x6EAC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 49 ; shiftValue = 0x1E; PairIndex = 1 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x000&lt;br /&gt;
   listOfValues[2] = 0x0000&lt;br /&gt;
   rootMask + shiftValue = 0x2D &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x1D741065&lt;br /&gt;
	shiftValue = 0xFFFFFFFE&lt;br /&gt;
	&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0xFFFFFFFE; PairIndex = 1 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x4194&lt;br /&gt;
   result += listOfValues[2] = 0x4194 + 0x0000 = 0x4194&lt;br /&gt;
   listOfValues[2] = 0x4194&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x0D; PairIndex = 1 ; PositionInPair = 1	&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x6BA0&lt;br /&gt;
   listOfValues[3] = 0x6BA0&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 45 ; shiftValue = 0x1C; PairIndex = 2 ; PositionInPair = 0&lt;br /&gt;
   result = (valueFromFile &amp;gt;&amp;gt; shiftValue) &amp;amp; mask = 0x0001&lt;br /&gt;
   listOfValues[4] = 0x0001&lt;br /&gt;
   rootMask + shiftValue = 0x2BD &amp;gt; 0x20 so&lt;br /&gt;
	valueFromFile = read (4 bytes) = 0x9F5B443C&lt;br /&gt;
	shiftValue = 0xFFFFFFFC&lt;br /&gt;
&lt;br /&gt;
NbBytesLeftToRead = 41 ; shiftValue = 0xFFFFFFFC; PairIndex = 2 ; PositionInPair = 0	&lt;br /&gt;
   result = (valueFromFile &amp;lt;&amp;lt; (-shiftValue)) &amp;amp; mask = 0x43C0&lt;br /&gt;
   result += listOfValues[4] = 0x0x43C0 + 0x0001 = 0x43C1&lt;br /&gt;
   listOfValues[4] = 0x43C1&lt;br /&gt;
&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the 53 bytes have been processed, the list contains the following 28 values, making up a list of 14 pairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
4194&lt;br /&gt;
6BA0&lt;br /&gt;
43C1&lt;br /&gt;
6B68&lt;br /&gt;
4467&lt;br /&gt;
6862&lt;br /&gt;
4905&lt;br /&gt;
6659&lt;br /&gt;
4B57&lt;br /&gt;
69D5&lt;br /&gt;
58A8&lt;br /&gt;
73B1&lt;br /&gt;
59E6&lt;br /&gt;
76C5&lt;br /&gt;
5952&lt;br /&gt;
7966&lt;br /&gt;
582E&lt;br /&gt;
79A9&lt;br /&gt;
5545&lt;br /&gt;
76A4&lt;br /&gt;
4C0C&lt;br /&gt;
7136&lt;br /&gt;
4B64&lt;br /&gt;
6DD6&lt;br /&gt;
3E84&lt;br /&gt;
6EAC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To get the coordinates of the first point, we take the first pair {0x3E84, 0x6EAC} and use the convertToCoordinates method described at [[#TERRAIN_VECTOR_DB|Terrain_Vector_DB]].&lt;br /&gt;
&amp;lt;br/&amp;gt;The first value in the pair is longitude-related. The second value in the pair is latitude-related.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
double deltaLongFactor = ((-74.765625) - (- 75.0)) / 0x8000;  // = 0.000007152557373046875&lt;br /&gt;
double deltaLatFactor  = (47.8125 - 47.63671875) / 0x8000;    // = 0.0000053644180297851563&lt;br /&gt;
&lt;br /&gt;
double LongitudeDeg = (- 75.0) + (0x3E84 * deltaLongFactor);    // = -74.885530471801758&lt;br /&gt;
double LatitudeDeg = 47.63671875 + (0x6EAC * deltaLatFactor);   // = 47.788703441619873&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TERRAIN SECTIONS =&lt;br /&gt;
&lt;br /&gt;
The following sections share the same structure:&lt;br /&gt;
* TerrainElevation&lt;br /&gt;
* TerrainLandClass&lt;br /&gt;
* TerrainWaterClass&lt;br /&gt;
* TerrainRegion&lt;br /&gt;
* PopulationDensity&lt;br /&gt;
* TerrainIndex&lt;br /&gt;
* TerrainSeasonXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
* TerrainPhotoXXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of subsections depends on the size of the scenery area. For higher levels of details, chances are that the area will overlap across multiple QMID squares. However, there will be at least a level for which the entire scenery area is contained inside the QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be a subsection for each level for which the entire scenery area is contained inside the corresponding QMID square.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, let&#039;s say that your photo scenery has the following coordinates:&amp;lt;br/&amp;gt;&lt;br /&gt;
North-West corner : Longitude = -73.388000, Latitude = 45.511400&amp;lt;br/&amp;gt;&lt;br /&gt;
Sout-East corner : Longitude = -73.373019, Latitude = 45.498672&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
At QMID level 14, the image overlaps across QMID (luv) = (14, 3639, 2024) and QMID(luv) = (14,3629, 2025). &amp;lt;br/&amp;gt;&lt;br /&gt;
However, at level 13, the image is entirely contained within QMID(luv) = (13,1819, 1012)&amp;lt;br/&amp;gt;&lt;br /&gt;
So there will be 14 subsections, the first one defining the level 0 and the last one defining the level 13.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;While the relation between the QMID Level and the rank of the subsection may be true for BGL files generated by the resample tool, it appears that this is wrong with other native BGL files such as the worldlc.bgl or other files located in the BASE folder.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SubSection with TRQ1 Records == &lt;br /&gt;
&amp;lt;br/&amp;gt;The number of subsections for a Terrain section is defined in the parent section.&amp;lt;br/&amp;gt;&lt;br /&gt;
A subsection has a size of 16 (0x10) bytes and has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 8 - DWORD[2]&lt;br /&gt;
| These 2 values are derived from the u,v,l values of the QMID containing the whole scenery for this specific level.&lt;br /&gt;
To retrieve the corresponding QMID values, see the [[#Getting QMID from DWORD values|algorithm]] in Annexe.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| File Offset = Position in the file of the subsection’s data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of the subsection’s data&lt;br /&gt;
|}&lt;br /&gt;
=== TRQ1 Record ===&lt;br /&gt;
The TRQ1 Record is a fixed-size header that contains information about each RasterDataLayer &amp;quot;Chunk&amp;quot; in a BGL file. Raster chunks are 2-Dimensional bitmaps of rasterized data containing 16-bit unsigned integer (32-bit for MS Flight) data points broken down into 256X256 pixel squares. The data can represent many different terrain elements including landclass, elevation, and raw aerial imagery data.&lt;br /&gt;
&lt;br /&gt;
At the file offset specified at relative offset 0x08 of the subsection above, we find a TRQ1 record, followed by 1 or 2 other records.&lt;br /&gt;
&lt;br /&gt;
The TRQ1 record has a size of 40 (0x28) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31515254 = &#039;TRQ1&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of this record = 0x28&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| Identifier of the parent section&lt;br /&gt;
*1: TERRAIN_PHOTO_XXX&lt;br /&gt;
*2: TERRAIN ELEVATION&lt;br /&gt;
*3: TERRAIN_LAND_CLASS&lt;br /&gt;
*4: TERRAIN_WATER_CLASS&lt;br /&gt;
*5: TERRAIN_REGION&lt;br /&gt;
*6: TERRAIN_SEASON_XXX&lt;br /&gt;
*7: POPULATION_DENSITY&lt;br /&gt;
*8: N/A&lt;br /&gt;
*9: TERRAIN_INDEX&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 1st Section (Values) following this record&lt;br /&gt;
 (Note that only a subset of these appear to be used by the resampler)&lt;br /&gt;
*0x0: Not_Compressed&lt;br /&gt;
*0x1: LZ1_Compressed&lt;br /&gt;
*0x2: Delta_Compressed&lt;br /&gt;
*0x3: Delta_And_LZ1_Compressed&lt;br /&gt;
*0x4: LZ2_Compressed&lt;br /&gt;
*0x5: Delta_And_LZ2_Compressed&lt;br /&gt;
*0x6: BitPack_Compressed&lt;br /&gt;
*0x7: BitPack_And_LZ1&lt;br /&gt;
*0x8: Solid_Block&lt;br /&gt;
*0x9: BitPack_And_LZ2&lt;br /&gt;
*0xA: PTC&lt;br /&gt;
*0xB: DXT1&lt;br /&gt;
*0xC: DXT3&lt;br /&gt;
*0xD: DXT5&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| 1 - BYTE&lt;br /&gt;
| Compression Type of 2nd Section (Mask) following this record (same as above)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4 - DWORD[2]&lt;br /&gt;
| Same 2 DWORDS as the ones defined at offset 0 of the subsection above.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Month Mask for TERRAIN_PHOTO and TERRAIN_SEASON (0x0000 otherwise)&lt;br /&gt;
*JAN: 0x0001&lt;br /&gt;
*FEB: 0x0002&lt;br /&gt;
*MAR: 0x0004&lt;br /&gt;
*APR: 0x0008&lt;br /&gt;
*MAY: 0x0010&lt;br /&gt;
*JUN: 0x0020&lt;br /&gt;
*JUL: 0x0040&lt;br /&gt;
*AUG: 0x0080&lt;br /&gt;
*SEP: 0x0100&lt;br /&gt;
*OCT: 0x0200&lt;br /&gt;
*NOV: 0x0400&lt;br /&gt;
*DEC: 0x0800&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NROWS - Number of raster rows present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| NCOLS - Number of raster columns present in chunk (including whitespace)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 1st data chunk (Values) that follows this record&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Size of 2nd data chunk (Mask) following this record (that follows the 1st record if size &amp;gt; 0)&lt;br /&gt;
 Not Present for TERRAIN_INDEX sections&lt;br /&gt;
 Note: this section is automatically added by resample after relevant raster sections,&lt;br /&gt;
 does not count toward total block count displayed in the resample statistics, and seems&lt;br /&gt;
 to always be relatively short such as TERRAIN_INDEX sections. It appears to always &lt;br /&gt;
 be compressed with BitPack + LZ1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content of the 2 records that follows is still to be determined based off of each applicable compression scheme. Work is underway to decompress each type.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RCS1 Record ===&lt;br /&gt;
The RCS1 Record is a fixed-size header that contains information about terrain scaling for any section of type TERRAIN_ELEVATION. &lt;br /&gt;
&lt;br /&gt;
Terrain scaling is used to convert the integer terrain values in the BGL data to the floating point values used in the terrain triangulation engine. These values correspond directly to the Fraction Bits settings in the resampler, and is always present with default values if these settings are not specified.&lt;br /&gt;
&lt;br /&gt;
It is not a true subsection in that it does not have a child section, it is merely a data section that is prepended to the compressed chunk.&lt;br /&gt;
&lt;br /&gt;
The RCS1 record has a size of 12 (0xC) bytes for the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Signature = 0x31435352= &#039;RCS1&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - FLOAT&lt;br /&gt;
| Scale Value = The scaling multiplier for the integer terrain value (Default: 1.0f)&lt;br /&gt;
This number is halved for each fractional bit required (FractionBits=1: Scale = 0.5f, FractionBits=2: Scale=0.25)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Base Value = The base offset to be added to the scaled value (Default: 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus, the actual terrain value = (Decompressed integer value * Scale) + Base. When default values are used, &lt;br /&gt;
the input is simply converted to a floating point number and not modified.&lt;br /&gt;
&lt;br /&gt;
For more information on Fractional Values please see the Scaled Elevation Values section in the Terrain and Scenery SDK document.&lt;br /&gt;
&lt;br /&gt;
=== Delta Compressed Segment ===&lt;br /&gt;
Adaptive delta compression is the simplest of the decompression techniques. It simply looks for one of several sentinel values, and the following bytes are read as deltas from the last value, until another sentinel value is seen.&lt;br /&gt;
&lt;br /&gt;
A C# implementation of this algorithm is given below:&lt;br /&gt;
&lt;br /&gt;
=== LZ1 (LZ77) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
    flag = Read 2 bits ; // possible values : 0,1,2,3&lt;br /&gt;
&lt;br /&gt;
    if (flag == 1)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
    }&lt;br /&gt;
    else if (flag == 2)&lt;br /&gt;
    {&lt;br /&gt;
        output the next 7 bits (as byte)&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // flag = 0 or 3 &lt;br /&gt;
        // This is a sequence already stored in the output buffer&lt;br /&gt;
        // Retrieve the offset of where this sequence is stored.&lt;br /&gt;
&lt;br /&gt;
        if (flag == 0)&lt;br /&gt;
        {&lt;br /&gt;
            existingSequenceOffset = Read next 6 bits&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            if (next bit == 0)&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x40 + Read next 8 bits&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                existingSequenceOffset = 0x140 + Read next 12 bits&lt;br /&gt;
            }&lt;br /&gt;
	&lt;br /&gt;
            if (existingSequenceOffset != 0x113F)&lt;br /&gt;
            {&lt;br /&gt;
                // Now get existing sequence length&lt;br /&gt;
                var nbBitsToRead = 0;&lt;br /&gt;
                while (0 == read next bit)&lt;br /&gt;
                {&lt;br /&gt;
                    nbBitsToRead++;&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
                if (nbBitsToRead == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = 2;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    sequenceLength = (read next &amp;lt;nbBitsToRead&amp;gt; bits) + 1 + (2 ^ nbBitsToRead)&lt;br /&gt;
                }&lt;br /&gt;
                backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LZ2 (LZ78) Compressed Segment ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Algorithm:&lt;br /&gt;
&lt;br /&gt;
while output count &amp;lt; expected output size&lt;br /&gt;
{&lt;br /&gt;
  if (ReadNextBit = 0)&lt;br /&gt;
  {&lt;br /&gt;
      output the next 7 bits (as byte)   &lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
      if (ReadNextBit != 0)&lt;br /&gt;
      {&lt;br /&gt;
          output the next 7 bits (as byte)  + 0x80&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
          // Read existingSequenceOffset value&lt;br /&gt;
          if (ReadNextBit = 0)&lt;br /&gt;
          {&lt;br /&gt;
              existingSequenceOffset = read next 6 bits&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
              if (ReadNextBit = 0)    &lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 8 bits) + 0x40&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  existingSequenceOffset = (read next 12 bits) + 0x140&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if (existingSequenceOffset != 0x113F)&lt;br /&gt;
          {&lt;br /&gt;
              nbBitsToGet = 0 &lt;br /&gt;
              while (ReadNextBit = 0)&lt;br /&gt;
              {&lt;br /&gt;
                  nbBitsToGet++;&lt;br /&gt;
              }&lt;br /&gt;
              if (nbBitsToGet != 0)&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = (ReadNext &amp;lt;nbBitsToGet&amp;gt; bits) + (2 ^ nbBitsToGet) + 2&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                  sequenceLength = 3 ;&lt;br /&gt;
              }&lt;br /&gt;
              backward output &amp;lt;sequenceLength&amp;gt; bytes from existingSequenceOffset&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reading bits:&lt;br /&gt;
  Bits are read from the bits pool from right to left (&amp;lt;-)&lt;br /&gt;
  When there is not enough bits in the bits pool, data is read from the source buffer and each byte is prepended (to the left) to the bits pool&lt;br /&gt;
&lt;br /&gt;
Backward output:&lt;br /&gt;
  nbBytesToCopy = sequenceLength &lt;br /&gt;
  index = output count - existingSequenceOffset&lt;br /&gt;
&lt;br /&gt;
  while (nbBytesToCopy &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
      output byte at outputBuffer[index]&lt;br /&gt;
      index++;&lt;br /&gt;
      nbBytesToCopy--;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= INDEXES =&lt;br /&gt;
The section VorIlsIcaoIndex (0x28), NdbIcaoIndex (0x29) and WayPointIcaoindex (0x2A) all share the same structure of 12 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Relative Offset&lt;br /&gt;
! Number of bytes&lt;br /&gt;
! Description&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| ICAO Identification ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4 - DWORD&lt;br /&gt;
| Region and Airport Identification&lt;br /&gt;
Bits 0-10 : Region ([[#ICAO Identifiers and region codes|Special Format]])&amp;lt;br/&amp;gt; &lt;br /&gt;
Bits 11-31 : Airport ICA ([[#ICAO Identifiers and region codes|Special Format]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID U Value (Level 9)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 2 - WORD&lt;br /&gt;
| QMID V value (Level 9)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Annexe A =&lt;br /&gt;
== Computing the bounding coordinates from a DWORD value ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static List&amp;lt;double&amp;gt; GetBoundingCoordinates(uint boundingValue)&lt;br /&gt;
{&lt;br /&gt;
    var list = new List&amp;lt;double&amp;gt;();&lt;br /&gt;
    var shiftValue = 15;&lt;br /&gt;
    var work = boundingValue;&lt;br /&gt;
    var latitudeData = (uint)0;&lt;br /&gt;
    var longitudeData = (uint)0;&lt;br /&gt;
&lt;br /&gt;
    while (work &amp;lt; 0x80000000 &amp;amp;&amp;amp; shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
        work *= 4;&lt;br /&gt;
    }&lt;br /&gt;
    work &amp;amp;= 0x7FFFFFFF;    // Remove negative flag, if any&lt;br /&gt;
    var powerOfTwo = shiftValue;&lt;br /&gt;
&lt;br /&gt;
    while (shiftValue &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        if ((work &amp;amp; 0x80000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            latitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ((work &amp;amp; 0x40000000) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            longitudeData += (uint)(1 &amp;lt;&amp;lt; shiftValue);&lt;br /&gt;
        }&lt;br /&gt;
        work *= 4;&lt;br /&gt;
        shiftValue--;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // factor = 1.0 / (2^i)&lt;br /&gt;
    var factor = 1.0 / (1 &amp;lt;&amp;lt; powerOfTwo);&lt;br /&gt;
&lt;br /&gt;
    // Calc bounding coordinates&lt;br /&gt;
    var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);&lt;br /&gt;
    var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);&lt;br /&gt;
    var minLongitude = (longitudeData * factor * 480.0) - 180.0;&lt;br /&gt;
    var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;&lt;br /&gt;
    &lt;br /&gt;
    list.Add(minLatitudeDeg);&lt;br /&gt;
    list.Add(maxLatitudeDeg);&lt;br /&gt;
    list.Add(minLongitude);&lt;br /&gt;
    list.Add(maxLongitude);&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computing Longitude and Latitude from a DWORD value ==&lt;br /&gt;
Latitude and longitude are no longer represented as before. Each location on the earth is fixed in&lt;br /&gt;
the LOD grid. Longitude and latitude are each represented by a 4 byte value (DWORD). The formula&lt;br /&gt;
for obtaining the decimal values is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(double) Lon = ((DWORD) Lon * (360.0 / (3 * 0x10000000))) – 180.0&lt;br /&gt;
(double) Lat = 90.0 - (DWORD) Lat * (180.0 / (2 * 0x10000000))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pitch, bank and heading ==&lt;br /&gt;
Pitch, bank and heading are given as ANGLE16 in form of a DWORD. The formula for obtaining&lt;br /&gt;
the decimal value is as follows:&lt;br /&gt;
(double) Pitch = (DWORD) Pitch * 360.0 / 0x10000&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICAO Identifiers and region codes ==&lt;br /&gt;
ICAO Identifiers and region codes are coded in a special format. Each number and letter has a&lt;br /&gt;
value from 0 .. 37:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| blank&lt;br /&gt;
| 00&lt;br /&gt;
|-&lt;br /&gt;
| Digits 0-9&lt;br /&gt;
| 02-11&lt;br /&gt;
|-&lt;br /&gt;
| Letters A-Z&lt;br /&gt;
| 12-37&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The code is calculated by starting from left: the value of the first digit/letter is multiplied by 38 (0x26), then&lt;br /&gt;
the value of the next digit/letter to the right is added, the sum s multiplied by 38 (0x26), and as long as&lt;br /&gt;
there are more digits/letters this process is repeated.&lt;br /&gt;
The region codes have only 2 digits/letters and the result is used as such; for the ICAO identifiers&lt;br /&gt;
for airports, ILS, VOR, NDB and waypoints there are up to 5 digits/letters, and the result is shifted&lt;br /&gt;
left by 5 positions, i.e. multiplied by 0x20. Bits 0 .. 4 of the resulting DWORD are frequently used&lt;br /&gt;
for other purposes.&lt;br /&gt;
The ICAO identifiers for primary and secondary ILS in a runway record are not shifted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding&#039;&#039;&#039;&lt;br /&gt;
So you have a DWORD value to be translated in a ICAO string.&lt;br /&gt;
If the value comes from an airport identifier, it first has to be shifted 5 bits to the right.&lt;br /&gt;
The pseudo-algorithm looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (values from airport data)&lt;br /&gt;
{&lt;br /&gt;
   shift value 5 bits to the right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while (value &amp;gt; 37)&lt;br /&gt;
{&lt;br /&gt;
   oneCodedChar = value % 38&lt;br /&gt;
   prepend OneCodedChar to the list&lt;br /&gt;
   value = (value - oneCodedChar) / 38&lt;br /&gt;
   if (value &amp;lt; 38)&lt;br /&gt;
   {&lt;br /&gt;
      oneCodedChar = value&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The first coded char in the list is the last one computed in the while loop &lt;br /&gt;
&lt;br /&gt;
foreach (oneCodedChar in list)&lt;br /&gt;
{&lt;br /&gt;
   if (oneCodedChar == 0)&lt;br /&gt;
   {&lt;br /&gt;
      output space char&lt;br /&gt;
   }&lt;br /&gt;
   else if (oneCodedChar &amp;gt; 1 &amp;amp;&amp;amp; oneCodedChar &amp;lt; 12)&lt;br /&gt;
   {&lt;br /&gt;
      // digit 0-9&lt;br /&gt;
      output &#039;0&#039; + (oneCodedChar - 2)&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      // letter&lt;br /&gt;
      output &#039;A&#039; + (oneCodedChar - 12)&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br/&amp;gt;&lt;br /&gt;
The value 0x0257C221 comes from an airport record.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x0257C221 is first shifted 5 bits to the right , which gives 0x0012BE11 = 1228305&amp;lt;br/&amp;gt;&lt;br /&gt;
- 1228305 is &amp;gt;= 38 so 1228305 % 38 = &#039;&#039;&#039;31&#039;&#039;&#039; and (1228305 - 31)/ 38 = 32323&amp;lt;br/&amp;gt;&lt;br /&gt;
- 32323 is &amp;gt;= 38 so 32323 % 38 = &#039;&#039;&#039;23&#039;&#039;&#039; and (32323 - 23) / 38 = 850&amp;lt;br/&amp;gt;&lt;br /&gt;
- 850 &amp;gt;= 38 so 850 % 38 = &#039;&#039;&#039;14&#039;&#039;&#039; and (850 - 14) / 38 = 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- &#039;&#039;&#039;22&#039;&#039;&#039; is &amp;lt; 38 so that is the last value.&amp;lt;br/&amp;gt;&lt;br /&gt;
So we got 31,23,14 and 22&amp;lt;br/&amp;gt;&lt;br /&gt;
- 22 is in the range [12 - 37] so letter = &#039;A&#039; + (22-12) = &#039;K&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 14 is in the range [12 - 37] so letter = &#039;A&#039; + (14-12) = &#039;C&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 23 is in the range [12 - 37] so letter = &#039;A&#039; + (14-23) = &#039;L&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- 31 is in the range [12 - 37] so letter = &#039;A&#039; + (31-12) = &#039;T&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
So the ICAO code is KCLT&lt;br /&gt;
&lt;br /&gt;
== Computing QMID u and v based on level and coordinates ==&lt;br /&gt;
&lt;br /&gt;
Whenever you move your mouse in the TmfViewer application, the u and v values of the QMID (Quad Mesh IDentifier) are updated in the status bar at the bottom of the screen.&lt;br /&gt;
All coordinates (longitude , latitude) inside the same QMID (or square) have the same u and v values for a specific level. The greater the level, the smaller the square.&lt;br /&gt;
See [http://msdn.microsoft.com/en-ca/library/cc707102.aspx#QMIDandLODValues Microsoft: Terrain and Scenery].&lt;br /&gt;
&lt;br /&gt;
The algorithm to compute the u and v values is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Input: &lt;br /&gt;
 - Longitude in degrees&lt;br /&gt;
 - Latitude in degrees&lt;br /&gt;
 - Level (QMID Level = LOD + 2) in the range [2..29]&lt;br /&gt;
&lt;br /&gt;
LongitudeData = INT(0.5 + (180 + LongitudeDeg) * (0x2000000 / 15)) &lt;br /&gt;
LatitudeData = INT(0.5 + (90 - LatitudeDeg) * (0x8000000 / 45))&lt;br /&gt;
&lt;br /&gt;
If LongitudeData &amp;gt; 0x30000000&lt;br /&gt;
	LongitudeData -= 0x30000000&lt;br /&gt;
If LongitudeData &amp;lt; 0&lt;br /&gt;
	LongitudeData += 0x30000000&lt;br /&gt;
&lt;br /&gt;
If LatitudeData &amp;gt; 0x20000000&lt;br /&gt;
	LatitudeData -= 0x20000000&lt;br /&gt;
If LatitudeData &amp;lt; 0&lt;br /&gt;
	LatitudeData += 0x20000000&lt;br /&gt;
&lt;br /&gt;
n = 30 - QMIDLevel&lt;br /&gt;
QMID.u = LongitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.v = LatitudeData &amp;gt;&amp;gt; n&lt;br /&gt;
QMID.l = level&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting DWORD values from QMID == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The algorithm takes the QMID data (u, v and l) as input and produces 2 DWORD values as output.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;u&#039;&#039;&#039; (longitude-related), &#039;&#039;&#039;v&#039;&#039;&#039; (latitude-related) and &#039;&#039;&#039;l&#039;&#039;&#039; (level) values are handled as DWORD (4 bytes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DWORD value &#039;&#039;&#039;u&#039;&#039;&#039; is made of 4 bytes: U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&amp;lt;br/&amp;gt;&lt;br /&gt;
The DWORD value &#039;&#039;&#039;v&#039;&#039;&#039; is made of 4 bytes: V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; is the most significant byte and V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; the least significant.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s compute U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; where:&amp;lt;br/&amp;gt;&lt;br /&gt;
* U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f (V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The fonction f(x) decomposes the input value x (a byte) in base-4:&amp;lt;br/&amp;gt;&lt;br /&gt;
x = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.64 + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.16 + a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.4 + a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then for each a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we compute the corresponding b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;:&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 2 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 4&lt;br /&gt;
* a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 3 &amp;amp;rArr; b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 5&lt;br /&gt;
where b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; are the coefficients of the output value in base-16.&lt;br /&gt;
&lt;br /&gt;
The output value y = f(x) is computed as follows:&amp;lt;br/&amp;gt;&lt;br /&gt;
y = b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;.4096 + b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.256 + b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;.16 + b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, f(0x4B) gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2, a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3  (0x4B = 75 = 1 x 64 + 0 x 16 + 2 x 4 + 3)&amp;lt;br/&amp;gt;&lt;br /&gt;
So we have b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 1, b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0, b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4, b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5&amp;lt;br/&amp;gt;&lt;br /&gt;
and the output value is: 1 x 4096 + 0 x 256 + 4 x 16 + 5  = 4165 = 0x1045&lt;br /&gt;
&lt;br /&gt;
We now know how to compute U&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&#039;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;A&#039;&#039;&#039; = (2 &amp;lt;&amp;lt; (2 * Level)) + 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039; = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; are the 2 output DWORD values.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;A&#039;&#039;&#039; goes at offset 0 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The value &#039;&#039;&#039;B&#039;&#039;&#039; goes at offset 4 of the subsection.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Because of the &amp;lt;code&amp;gt;(2 &amp;lt;&amp;lt; (2 * Level))&amp;lt;/code&amp;gt; part and because the A is a DWORD, the maximum QMID level is 15.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with QMID (13,1819,1012).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1819 = 0x71B and 1012 = 0x3F4.&amp;lt;br/&amp;gt;&lt;br /&gt;
so U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x1B, U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x07, V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0xF4 and V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x03. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
The conversion gives:&amp;lt;br/&amp;gt;&lt;br /&gt;
U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x145, U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x15, V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0x5510 and V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0x05. Other values are 0x00.&amp;lt;br/&amp;gt;&lt;br /&gt;
2 &amp;lt;&amp;lt; (2 * Level) = 2 &amp;lt;&amp;lt; 26 = 0x8000000.&lt;br /&gt;
&lt;br /&gt;
So &#039;&#039;&#039;A&#039;&#039;&#039; = 0x8000000 + 2 *(0x00055510) + 0x00150145 = &#039;&#039;&#039;0x81FAB65&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
and &#039;&#039;&#039;B&#039;&#039;&#039; = &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting QMID from DWORD values == &lt;br /&gt;
&lt;br /&gt;
The algorithm takes 2 DWORD values (A and B) as input and produces the QMID data (u, v and l) as output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For the header and some subsections, the 2nd DWORD value (B) is zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;level&#039;&#039;&#039; value can be deduced from the A value since for each level there is a maximum value of u and v and hence a maximum value of A. (The minimum value is 0)&amp;lt;br/&amp;gt;&lt;br /&gt;
U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3 * 2&amp;lt;sup&amp;gt;Level-2&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 2&amp;lt;sup&amp;gt;Level-1&amp;lt;/sup&amp;gt; - 1&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| Level&lt;br /&gt;
| U&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt;&lt;br /&gt;
| A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x02&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0x08&lt;br /&gt;
| 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x26&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x9B&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 11&lt;br /&gt;
| 7&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x26F&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 23&lt;br /&gt;
| 15&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0x9BF&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 47&lt;br /&gt;
| 31&lt;br /&gt;
| 0x2000&lt;br /&gt;
| 0x26FF&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 95&lt;br /&gt;
| 63&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x9BFF&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 191&lt;br /&gt;
| 127&lt;br /&gt;
| 0x20000&lt;br /&gt;
| 0x26FFF&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 383&lt;br /&gt;
| 255&lt;br /&gt;
| 0x80000&lt;br /&gt;
| 0x9BFFF&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 767&lt;br /&gt;
| 511&lt;br /&gt;
| 0x200000&lt;br /&gt;
| 0x26FFFF&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1535&lt;br /&gt;
| 1023&lt;br /&gt;
| 0x800000&lt;br /&gt;
| 0x9BFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 3071&lt;br /&gt;
| 2047&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| 0x26FFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 6143&lt;br /&gt;
| 4095&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| 0x9BFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12287&lt;br /&gt;
| 8191&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 0x26FFFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 24575&lt;br /&gt;
| 16383&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| 0x9BFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level can be deduced from A by finding the range where A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; &amp;amp;le; A &amp;amp;le; A&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;. Note that A&amp;lt;sub&amp;gt;min&amp;lt;/sub&amp;gt; = (2 &amp;lt;&amp;lt; (2 * Level).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have 2 equations:&lt;br /&gt;
* A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * (V&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;) + (U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; * 65536 + U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* B = 2 * (V&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536 + V&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) + U&#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + (U&#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; * 65536)&lt;br /&gt;
&lt;br /&gt;
Both equations are in the form : &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&lt;br /&gt;
&lt;br /&gt;
So how do we differentiate  &amp;amp;alpha; and &amp;amp;beta; ?&lt;br /&gt;
&lt;br /&gt;
The trick is to remember that the U&#039; and V&#039; values were generated using only the 0,1,4 and 5 digits.&amp;lt;br/&amp;gt;&lt;br /&gt;
The table below shows you what happens when you add these digits using &amp;amp;Sigma; = 2 * &amp;amp;beta; + &amp;amp;alpha;&amp;lt;br/&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | &amp;amp;alpha;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;beta;&lt;br /&gt;
| 2 * &amp;amp;beta;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 8&lt;br /&gt;
| 9&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 10&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So any addition in the form of &amp;amp;Sigma; = 2 * &amp;amp;beta;+ &amp;amp;alpha; yields a unique result in the range [0..15]. Knowing the result &amp;amp;Sigma;, we are able to retrieve &amp;amp;alpha; and &amp;amp;beta;.&lt;br /&gt;
&lt;br /&gt;
We have the equation A - (2&amp;lt;&amp;lt; (2 * Level) = 2 * V&#039;+ U&#039;.   (bytes 0 and 1)&amp;lt;br/&amp;gt;&lt;br /&gt;
Hence if we take each byte of this value, we are able to retrieve each b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; of U&#039; (&amp;amp;alpha;) and V&#039; (&amp;amp;beta;).&lt;br /&gt;
&lt;br /&gt;
Same thing for the equation B = 2 * V&#039; + U&#039; (bytes 2 and 3).&lt;br /&gt;
&lt;br /&gt;
Once we have the b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, we can deduce the a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values and restore the original U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; and V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: You may want to have an array of precomputed values if you are using this algorithm intensively.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lets&#039; take our previous example with A = 0x81FAB65 and B = 0.&lt;br /&gt;
&lt;br /&gt;
Since B = 0 we already know that U&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = U&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
0x8000000 &amp;amp;le; 0x81FAB65 &amp;amp;le; 0x9BFFFFF so &#039;&#039;&#039;Level = 13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A - (2&amp;lt;&amp;lt; (2 * Level) = 0x1FAB65&amp;lt;br/&amp;gt;&lt;br /&gt;
The hexadecimal digit A (10d) can only be obtained when &amp;amp;alpha; = 5 and &amp;amp;beta; = 0  (see table above).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + 2 * V&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A  &amp;amp;rArr;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;F&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| u&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;beta;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = &amp;amp;alpha;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
| b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So for U&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 4 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 2&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 2 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 27d = 0x1B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For U&#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, we have:&lt;br /&gt;
* b&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0 &amp;amp;rArr; a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 0&lt;br /&gt;
* b&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1 &amp;amp;rArr; a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
* b&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 5 &amp;amp;rArr; a&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&lt;br /&gt;
&amp;amp;rArr; U&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = 0 * 4&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 0 * 4&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; 0 1 * 3&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = 7d = 0x07&amp;lt;br/&amp;gt;&lt;br /&gt;
so U = 0x071B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You got the idea: it&#039;s the same for V.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A simpler algorithm can be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static Qmid CalcQmidFromDwords(UInt32 dwordA, UInt32 dwordB)&lt;br /&gt;
{&lt;br /&gt;
	var v = 0;&lt;br /&gt;
	var u = 0;&lt;br /&gt;
	var cnt = 0x1F;&lt;br /&gt;
	var workDwordA = dwordA;&lt;br /&gt;
	var workDwordB = dwordB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt; 0 &amp;amp;&amp;amp; (workDwordB &amp;amp; 0x80000000) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	workDwordB &amp;amp;= 0x7FFFFFFF;&lt;br /&gt;
	var level = cnt;&lt;br /&gt;
&lt;br /&gt;
	while (cnt &amp;gt;= 0)&lt;br /&gt;
	{&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x80000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			v += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ((workDwordB &amp;amp; 0x40000000) != 0)&lt;br /&gt;
		{&lt;br /&gt;
			u += (1 &amp;lt;&amp;lt; cnt);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		workDwordB &amp;lt;&amp;lt;= 2;&lt;br /&gt;
		workDwordB += (workDwordA &amp;amp; 0xC0000000) &amp;gt;&amp;gt; 30;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		workDwordA += workDwordA;&lt;br /&gt;
		cnt--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return new Qmid(u, v, level);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== How are the header QMIDs computed? == &lt;br /&gt;
The following algorithms apply only to APX*.bgl (Airport), ATX*.bgl (Waypoint), BRX*.bgl (Extrusion Bridge), NVX*.bgl (Nav), OBX*.bgl (SceneryObject) and BNX*.bgl (Boundary) files.&lt;br /&gt;
&amp;lt;br/&amp;gt;For these files, the maximum level value is 9.&lt;br /&gt;
&amp;lt;br/&amp;gt;To compute the QMID values that will be stored in the header, one must gather all the subsection&#039;s QMID values for the following sections:&lt;br /&gt;
* Airport&lt;br /&gt;
* Nav&lt;br /&gt;
* Ndb&lt;br /&gt;
* Marker&lt;br /&gt;
* Boundary&lt;br /&gt;
* Waypoint&lt;br /&gt;
* Geopol&lt;br /&gt;
* SceneryObject&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then the computation flow is :&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:AirportHeaderQmids.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:QmidMatchAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:SmallListAlgo.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Delta Decompression Algorithm == &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Category:File_Formats]]&lt;/div&gt;</summary>
		<author><name>Patrick Germain</name></author>
	</entry>
</feed>